2013-11-14 27 views
2

非常快速的问题。 有人可以向我解释为什么这段代码不起作用吗?Struts逻辑标签等于不起作用

<%@ taglib prefix="logic" uri="/WEB-INF/struts-logic.tld" %> 

<% 
    int myValue= 2; 
%> 

myValue: <%=myValue%> 
<br/> 
<logic:equal name="myValue" value="2" scope="session"> 
    logic:equal works! 
</logic:equal> 

即使我更改myvalue的一个String仍不起作用

很令人沮丧,因为我知道这将是明显的东西。

在此先感谢

KS


工作的例子!

<%@ taglib prefix="logic" uri="/WEB-INF/struts-logic.tld" %> 

<% 
    request.setAttribute("myValue", 2); 
%> 

myValue - <%=request.getAttribute("myValue")%>]] 

<br/> 
<logic:equal name="myValue" value="2" scope="request"> 
    logic:equal works! 
</logic:equal> 

回答

2
<logic:equal name="myValue" value="2" scope="session"> 

这个标签查找名为 “myvalue的” 会话属性。不适用于名为“myValue”的局部变量。

真正的问题是:为什么你要使用标记为JSTL的标记库,这个库是正式放弃的框架的一部分?

+0

变更的范围,“请求”,但仍然没有为我工作。 – Casper

+2

我特别不使用弃用的库来支持JSTL,但我工作的公司是。所以我会把工具交给我。 – Casper

+0

将范围更改为请求将使其查找名为“myValue”的请求属性,而不是名为“myValue”的本地变量。你的scriptlet代码应该这样做:'request.setAttribute(“myValue”,2)'。这将创建一个名为“myValue”的请求属性。 –

0

Scriptlet变量不能被任何范围访问。你只能用scriptlet表达式来使用它们。

在Struts可以使用JSTL与Struts标签一起

<c:set var="myValue" value="2"/> 
<c:if test="${myValue == 2}"> 
    if test works! 
</c:if>