2010-10-11 4 views
2

Je suis en train de passer une valeur de l'objet de la session à une balise personnalisée <l:LoginStatus userId="<% out.print((String)session.getAttribute("userId")); %>"/>Essayer d'imprimer une variable de session dans une jsp provoque une erreur « égale attendue »

Pourquoi cette ligne me donne l'erreur:
org .apache.jasper.JasperException: /index.jsp(1,1) /header.jsp(64,131) symbole égal prévu

Quand je passe une valeur codée en dur comme celui-ci <l:LoginStatus userId="4"/>

Tout fonctionne très bien.

Cela n'a aucun sens pour moi, je pensais que l'utilisation out.print rendrait = inutile.

Répondre

3

Une alternative est d'utiliser simplement EL. Cela donne un code beaucoup plus propre.

<l:LoginStatus userId="${userId}" /> 
+0

Merci, cela a résolu le problème noté et un autre problème avec ClassCastExceptions que je recevais en utilisant la méthode que j'essayais. – Ankur

+0

CCE peut se produire lorsque l'objet n'est * en réalité * pas un «String» du tout. Après tout, le casting n'est pas nécessaire ici. Le '<%= %>' appelait implicitement 'String # valueOf()'. Donc '<% = session.getAttribute (" userId ")%>' aurait aussi simplement fonctionné. L'utilisation de * scriptlets * est cependant [déconseillée] (http://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files). – BalusC

2

Il devrait être:

<%= (String)session.getAttribute("userId") %> 

En général, il est beaucoup mieux pratique de faire les choses de cette façon, au lieu d'écrire directement à une page. En outre, les choses ne fonctionnent pas exactement comme vous le pensez.

+1

Votre dernière affirmation est techniquement fausse. C'est l'inverse. – BalusC

+0

@Balus, hmmm, Pour être honnête, j'utilise Asp.Net, pas JSP. Je déteste me tromper ... – jjnguy

+0

Résumé d'édition cool btw :) – BalusC

0

Comme vous l'impression de la valeur de l'expression, vous devez faire la déclaration

<l:LoginStatus userId="<%=out.print((String)session.getAttribute("userId"))%>"/> 

ou

<l:LoginStatus userId="<%=out.print(session.getAttribute("userId")).toString()%>"/> 
+0

Le '<%= x %>' fait effectivement la même chose que '<% out.print (x)%>'. Donc, cette réponse est fausse. – BalusC

Questions connexes