2012-08-30 61 views
3

我有这样的代码JSP全局变量

<%! 
    public String class_name = ""; 
%> 
<c:choose> 
     <c:when test="${WCParam.categoryId != null}"> 
     <% class_name = "my_account_custom"; %> 
     </c:when> 
     <c:otherwise> 
     <% class_name = "my_account_custom_3"; %> 
     </c:otherwise>  
</c:choose>  
<p>Class name = <c:out value='${class_name}' /></p> 

WCParam.categoryId为空或不是 但我CLASS_NAME变量始终是空的。 什么我做错了 感谢

+0

你”对于声明为“<%! %>”的变量,IIRC可能会非常小心,因为它们是实例变量,因此在该页面的所有用户之间共享。这*可能会好起来的,但IMO应该避免像所有脚本一样。 –

回答

4

小脚本(<%...%>)和表达式语言(${...})是完全不同的事情,因此他们的变量属于不同的范围(在EL表达式中使用的变量实际上是要求不同范围的属性)。

如果decalred class_name作为一个小脚本变量,你应该使用小脚本,以及访问:

<p>Class name = <c:out value='<%=class_name%>' /></p> 

然而,你可以写不使用变量都:

<p>Class name = <c:out 
    value='${WCParam.categoryId != null ? "my_account_custom" : "my_account_custom3"}' /></p>  
+0

+1:这是真的。 el($ {})用于访问范围变量(应用程序,会话,请求和页面),并且它们不能访问在scriptlet中定义的变量 – mhshams