JSTL - 无法访问存储为会话变量的对象的属性

问题描述:

我遵循标准的MVC体系结构。 在我的控制,我有以下的代码,JSTL - 无法访问存储为会话变量的对象的属性

userDetailsBean = userDetailsDAO.getUserDetailsFromEmail(loginEmail); 
session.setAttribute("userDetails", userDetailsBean); 

对象userDetailsBean包含不同的方法,如getFName()getLName()等。我从视图文件访问该对象,如下所示,

<c:choose> 
    <c:when test="${sessionScope.userDetails != null}"> 
      <li> 
       <a href="#userName"> 
        ${sessionScope.userDetails.getFName()} 
       </a> 
      </li> 
    </c:when> 
    <c:otherwise> 
      <li> 
       <a href="#login">Log in/Register</a> 
      </li> 
    </c:otherwise> 
</c:choose> 

我从上面的代码得到以下错误,

HTTP Status 500 - /header.jsp(22,38) The function getFName must be used with a prefix when a default namespace is not specified 

我在网上搜了很多,尝试了许多不同的意见一样,

${sessionScope.userDetails.fName} 
${sessionScope.userDetails.get(0).fName} 

但没有它的工作,

我使用Tomacat 6 JSTL 1.2和Netbeans IDE作为。

任何帮助表示赞赏,在此先感谢!

您可以阅读JavaBean规范。有关它的链接,请看Where is the JavaBean property naming convention defined?
的答案请参阅第8.3节和第8.8节。 你应该让自己的生活变得简单,只需使用传统名称作为你的领域。但是,如果你选择不这样做,那么考虑下面的bean。

package test; 
public class BeanTest implements java.io.Serializable { 
    private String bHours = "ten"; 
    private String RICK = "me"; 
    private String Joe = "hello"; 

    public BeanTest(){ 
    } 
    public void setbHours(String bHours){ 
     this.bHours = bHours; 
    } 
    public String getbHours(){ 
     return bHours; 
    } 
    public void setRICK(String str){ 
         RICK = str; 
    } 
    public String getRICK(){ 
     return RICK; 
    } 
    public void setJoe(String str){ 
         Joe = str; 
    } 
    public String getJoe(){ 
     return Joe; 
    } 
} 

在JSP中,你可以使用下面来访问bean中的数据。

<jsp:useBean id="myBean" class="test.BeanTest" /> 
${myBean.RICK} 
${myBean.joe} 
${myBean.bHours} 
<%=myBean.getbHours()%> 
+0

谢谢,编写$ {userDetails.FName}解决了这个问题。 –