Accès à l'attribut Session sur jstl
Je suis en train d'essayer d'accéder à un attribut de session à partir d'une page jsp qui est établi et distribué par un servlet, mais je reçois le message d'erreur "jsp:attribut doit être le sous-élément d'une norme ou d'une action personnalisée. Ce qui pourrait être mauvais, suis-je accéder de façon incorrecte? Ce qui suit est l'extrait de code.
Servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.setAttribute("Questions", getQuestion());
System.out.println(session.getAttribute("Questions"));
RequestDispatcher req = request.getRequestDispatcher("DisplayQuestions.jsp");
req.forward(request, response);
}
private QuestionBookDAO getQuestion(){
QuestionBookDAO q = new QuestionBookDAO();
q.setQuestion("First Question");
q.setQuestionPaperID(100210);
q.setSubTopic("Java");
q.setTopic("Threads");
return q;
}
Je suis en mesure de définir l'attribut de session avec succès. Mais quand j'essaie d'accéder à la même chose dans mon fichier jsp (ci-dessous), j'obtiens une erreur d'exécution
<jsp:useBean id="Questions" type="com.cet.evaluation.QuestionBook" scope="session">
<jsp:getProperty property="Questions" name="questionPaperID"/>
<jsp:getProperty property="Questions" name="question"/>
</jsp:useBean>
Le haricot QuestionBook contient deux variables privées questionPaperID et question
Je lance l'application sur Tomcat et au-dessous de l'erreur est levée.
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /DisplayQuestions.jsp(15,11) jsp:attribute must be the subelement of a standard or custom action
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1160)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1461)
org.apache.jasper.compiler.Parser.parseBody(Parser.java:1670)
org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1020)
....
source d'informationauteur Vijay Selvaraj
Vous devez vous connecter pour publier un commentaire.
Vous devez absolument éviter d'utiliser
<jsp:...>
balises. Ils sont des reliques du passé et doit toujours être évitée maintenant.Utilisation de la JSTL.
Maintenant, si vous utilisez la JSTL ou de toute autre étiquette de la bibliothèque, l'accès à un haricot propriété besoin de votre bean pour avoir cette propriété. Une propriété n'est pas une instance privée variable. C'est une information accessible via un public de lecture (et de définition, si la propriété est accessible en écriture). Pour accéder à la questionPaperID de la propriété, vous avez donc besoin d'avoir un
méthode dans votre bean.
Une fois que vous avez cela, vous pouvez afficher la valeur de cette propriété à l'aide de ce code :
ou, pour cibler spécifiquement la session de l'étendue des attributs (dans le cas de conflits entre les étendues) :
Enfin, je vous encourage à le nom de la portée des attributs comme Java variables commençant par une lettre minuscule.
Vous n'avez pas besoin de la
jsp:useBean
pour définir le modèle si vous avez déjà un contrôleur qui a élaboré le modèle.Juste accéder à la plaine par EL:
ou par JSTL
<c:out>
tag si vous souhaitez HTML échapper à l'valeurs ou lorsque vous êtes encore à travailler sur l'héritage de la Servlet 2.3 conteneurs ou plus lors de l'EL n'était pas pris en charge dans le texte du modèle:Voir aussi:
Sans rapport avec le problème, la pratique normale est par le moyen de commencer le nom de l'attribut avec une minuscule, comme vous le faites avec les noms de variable.
et de modifier les EL en conséquence de l'utilisation
${questions}
.Notez également que vous n'avez pas de JSTL balise dans votre code. C'est toute la plaine de JSP.