JSTL - 无法访问存储为会话变量

时间:2016-03-01 01:55:41

标签: java tomcat jstl

我遵循标准的MVC架构。 在我的控制器中,我有以下代码,

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

对象userDetailsBean包含不同的方法,例如getFName()getLName()等。我从View文件中访问此对象,如下所示,

<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。

感谢任何帮助,提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以阅读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()%>