我是Java EE的新手,遇到了一个问题,我不明白为什么会这样。 这是我的问题:
我无法使用在同一页面的scriptlet中创建的<jsp:getProperty>
来访问JavaBean。它抛出以下异常:
Attempted a bean operation on a null object.
这是我的bean和jsp页面:
package com.webProject3.beans;
public class User implements java.io.Serializable {
private static final long serialVersionUID = 1209333714609490385L;
private int id;
private String lastName;
private String firstName;
public User(){
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
}
<body>
<%
com.webProject3.beans.User requestedUser = new com.webProject3.beans.User();
requestedUser.setFirstName("Peter");
requestedUser.setLastName("Petrelli");
%>
<p><jsp:getProperty name="requestedUser" property="firstName"></jsp:getProperty></p>
</body>
答案 0 :(得分:3)
您的问题是您正在尝试使用超出范围的变量。您需要在实例化的同一范围内使用该变量。
试试这个:
<body>
<jsp:useBean id="user" class="com.webProject3.beans.User"/>
<%
requestedUser.setFirstName("Peter");
requestedUser.setLastName("Petrelli");
%>
然后使用EL表示法进行访问,如下所示:
${user.firstName}
${user.lastName}
等...
答案 1 :(得分:3)
为了保持一致性,坚持使用一代JSP技术可能更好。也就是说,不要让理想主义阻碍实用主义。
Scriptlets +表达式(意大利面条代码的配方):
<%
com.webProject3.beans.User requestedUser = new com.webProject3.beans.User();
requestedUser.setFirstName("Peter");
%>
<%=requestedUser.getFirstName()%>
标准行动:
<jsp:useBean id="user" class="com.webProject3.beans.User">
<jsp:setProperty name="user" property="firstName" value="Peter" />
</jsp:useBean>
<jsp:getProperty name="user" property="firstName" />
JSTL(自定义标记),使用标准操作来实例化bean:
<jsp:useBean id="name" class="com.webProject3.beans.User">
<c:set target="${name}" property="firstName" value="Peter" />
</jsp:useBean>
<c:out value="${name.firstName}" escapeXml="false" />
如果bean在控制器servlet而不是JSP中实例化,则通常也可以从JSTL代码中删除标准操作。
自定义标签的引入为其他框架铺平了道路,因此通常也不使用JSTL。
要了解错误的确切原因,请查看是否可以找到生成的servlet代码(如果有)。在Tomcat中,这最终会出现在一个名为org / apache / jsp / foo_jsp.java的工作目录中