2016-03-01 1 views
0

Я следую стандартной архитектуре MVC. В моем контроллере у меня есть следующий код,JSTL - Не удается получить доступ к объекту, хранящемуся как переменная сеанса

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> 

I 'm получает следующую ошибку от вышеуказанного кода,

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. Вы должны сделать свою жизнь легкой и просто использовать обычные имена для своих полей. Но, если вы решите не делать этого, тогда рассмотрите следующий компонент.

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 вы можете использовать следующее для доступа к данным в компоненте.

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

Спасибо, написав $ {userDetails.FName}, решил проблему. –