2016-03-01 40 views
0

我遵循標準的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作爲。

任何幫助表示讚賞,在此先感謝!

回答

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()%> 
+0

謝謝,編寫$ {userDetails.FName}解決了這個問題。 –