https://issues.apache.org/bugzilla/show_bug.cgi?id=45153
Summary: Javabean not accessible to jsp until placed in a
package.
Product: Tomcat 6
Version: unspecified
Platform: Macintosh
OS/Version: Mac OS X 10.4
Status: NEW
Severity: normal
Priority: P2
Component: Servlet & JSP API
AssignedTo: [EMAIL PROTECTED]
ReportedBy: [EMAIL PROTECTED]
I am using version 6.0.16 of tomcat and the problem may be version dependent.
The problem I experienced is, if a bean is not contained within a package, the
bean is not accessible from a JSP.
Without a package specified in the bean class and with the bean class file in
the classes folder, the following exceptions occurred. The condition was not
resolved until a "package foo;" statement was added to the bean class and the
class file was placed in the "classes/foo" folder.
This is the error when the useBean standard action was used:
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /testJSTL3.jsp(12,0) The value for the
useBean class attribute TestBean1 is invalid.
at
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
...
This is the error when a scriptlet was used:
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 7 in the jsp file: /testJSTL3.jsp
TestBean1 cannot be resolved to a type
4: <%
5: String [] movieList = {"Amelie", "Returrn of the King", "Mean Girls"};
6: request.setAttribute("movieList", movieList);
7: TestBean1 myBean = new TestBean1();
This is the error when the page directive and import attribute were used in the
jsp.
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 6 in the generated java file
The import TestBean1 cannot be resolved
The following is a failing version of the code:
TestBean1.java:
public class TestBean1 {
private String prop1;
private int prop2;
public TestBean1() {
}
public String getProp1() {
return prop1;
}
public void setProp1(String newProp) {
prop1 = newProp;
}
public int getProp2() {
return prop2;
}
public void setProp2(int newProp) {
prop2 = newProp;
}
}
testBean.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="TestBean1" %>
<html><body>
<%
String [] movieList = {"Amelie", "Returrn of the King", "Mean Girls"};
request.setAttribute("movieList", movieList);
TestBean1 myBean2 = new TestBean1();
myBean2.setProp1("This is a String a myBean property");
myBean2.setProp2(87654321);
request.setAttribute("myBean2", myBean2);
%>
<jsp:useBean id="myBean" class="TestBean1" scope="request" />
<jsp:setProperty name="myBean" property="prop1" value="This is a String
property." />
<jsp:setProperty name="myBean" property="prop2" value="12345678" />
<%-- forEach looks through scope maps for attribute specified in items
attribute --%>
<table>
<c:forEach var="s" items="${movieList}" varStatus="movieNum">
<tr><td>Movie ${movieNum.count}: ${s}</td></tr>
</c:forEach>
<tr><td>Prop1: ${myBean.prop1}</td></tr>
<tr><td>Prop2: ${myBean.prop2}</td></tr>
<tr><td>Last Row</td></tr>
</table>
</body></html>
The following is a working version of the code:
TestBean1.java:
package foo;
public class TestBean1 {
private String prop1;
private int prop2;
public TestBean1() {
}
public String getProp1() {
return prop1;
}
public void setProp1(String newProp) {
prop1 = newProp;
}
public int getProp2() {
return prop2;
}
public void setProp2(int newProp) {
prop2 = newProp;
}
}
testBean.jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="foo.TestBean1" %>
<html><body>
<%
String [] movieList = {"Amelie", "Returrn of the King", "Mean Girls"};
request.setAttribute("movieList", movieList);
TestBean1 myBean2 = new foo.TestBean1();
myBean2.setProp1("This is a String a myBean property");
myBean2.setProp2(87654321);
request.setAttribute("myBean2", myBean2);
%>
<jsp:useBean id="myBean" class="foo.TestBean1" scope="request" />
<jsp:setProperty name="myBean" property="prop1" value="This is a String
property." />
<jsp:setProperty name="myBean" property="prop2" value="12345678" />
<%-- forEach looks through scope maps for attribute specified in items
attribute --%>
<table>
<c:forEach var="s" items="${movieList}" varStatus="movieNum">
<tr><td>Movie ${movieNum.count}: ${s}</td></tr>
</c:forEach>
<tr><td>Prop1: ${myBean.prop1}</td></tr>
<tr><td>Prop2: ${myBean.prop2}</td></tr>
<tr><td>Last Row</td></tr>
</table>
</body></html>
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]