Возникла исключительная ситуация при попытке получить доступ к JavaBean - PullRequest
1 голос
/ 11 июля 2009

Я новичок в Java EE, и у меня возникла проблема, я не понимаю, почему это происходит. Вот моя проблема:

Я не могу получить доступ к JavaBean-компоненту, используя <jsp:getProperty>, созданный в скриптлете на той же странице. Это исключение ниже:

Attempted a bean operation on a null object.

Вот моя страница с бобами и 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>  

Ответы [ 2 ]

3 голосов
/ 11 июля 2009

Ради согласованности, вероятно, лучше придерживаться одного поколения технологий JSP. Тем не менее, не позволяйте идеализму стоять на пути прагматизма.

Сценарии + выражения (рецепт для кода спагетти):

<%
    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 (пользовательские теги) с использованием стандартного действия для создания экземпляра компонента:

<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" />

Если компоненты создаются в сервлете контроллера, а не в JSP, стандартные действия также часто могут быть исключены из кода JSTL.

Введение пользовательских тегов проложило путь для других платформ, поэтому часто JSTL также не используется.

Чтобы понять точную причину вашей ошибки, посмотрите, можете ли вы найти сгенерированный код сервлета (если есть). В Tomcat это заканчивается рабочим каталогом с именем вроде org / apache / jsp / foo_jsp.java

3 голосов
/ 11 июля 2009

Ваша проблема в том, что вы пытаетесь использовать переменную, которая находится вне области видимости. Вам необходимо использовать переменную в той же области, в которой вы ее создали.

попробуйте это:

<body>
<jsp:useBean id="user" class="com.webProject3.beans.User"/>
<%
  requestedUser.setFirstName("Peter");  
  requestedUser.setLastName("Petrelli"); 
%>

Затем вы получаете доступ, используя обозначение EL следующим образом:

${user.firstName}
${user.lastName}

и т.д ...

...