Access Session attribute on jstl

前端 未结 2 1641
醉酒成梦
醉酒成梦 2020-12-08 22:21

I am trying to access a session attribute from a jsp page which is set and dispatched by a servlet, but I am getting the error message \"jsp:attribute must be the subelement

相关标签:
2条回答
  • 2020-12-08 22:50

    You don't need the jsp:useBean to set the model if you already have a controller which prepared the model.

    Just access it plain by EL:

    <p>${Questions.questionPaperID}</p>
    <p>${Questions.question}</p>
    

    or by JSTL <c:out> tag if you'd like to HTML-escape the values or when you're still working on legacy Servlet 2.3 containers or older when EL wasn't supported in template text yet:

    <p><c:out value="${Questions.questionPaperID}" /></p>
    <p><c:out value="${Questions.question}" /></p>
    

    See also:

    • Our Servlets wiki page

    Unrelated to the problem, the normal practice is by the way to start attribute name with a lowercase, like you do with normal variable names.

    session.setAttribute("questions", questions);
    

    and alter EL accordingly to use ${questions}.

    Also note that you don't have any JSTL tag in your code. It's all plain JSP.

    0 讨论(0)
  • 2020-12-08 23:10

    You should definitely avoid using <jsp:...> tags. They're relics from the past and should always be avoided now.

    Use the JSTL.

    Now, wether you use the JSTL or any other tag library, accessing to a bean property needs your bean to have this property. A property is not a private instance variable. It's an information accessible via a public getter (and setter, if the property is writable). To access the questionPaperID property, you thus need to have a

    public SomeType getQuestionPaperID() {
        //...
    }
    

    method in your bean.

    Once you have that, you can display the value of this property using this code :

    <c:out value="${Questions.questionPaperID}" />
    

    or, to specifically target the session scoped attributes (in case of conflicts between scopes) :

    <c:out value="${sessionScope.Questions.questionPaperID}" />
    

    Finally, I encourage you to name scope attributes as Java variables : starting with a lowercase letter.

    0 讨论(0)
提交回复
热议问题