日期:2014-05-18  浏览次数:20584 次

Struts2.0.11.1 s:if test 标签问题
环境:
Tomcat6
JDK6
Struts2.0.11.1

代码:
L1: <s:set name="portOper" value="#parameters.portOper"/>
L2: <s:property value="#portOper" />a
L3: <s:if test="#portOper == '1'">
L4: Enter name of port to activate (* = all):
L5: <s:property value="#portOper" />b
L6: </s:if>

问题:
第一行用set压入一个值,第二行获取此值显示,可以显示为“1a”,表示“portOper”的值为“1”。
但是第三行的test,试过多种写法,test却总为false,不进入第四行

如果将第三行改为“<s:if test="#portOper != null">”,则可以进入第四行,且第五行显示为“1b”,表示也拿到了portOper的值,为“1”

请帮忙看下,Struts2.0.11的tag不再允许嵌套使用EL表达式,全面使用OGNL。 不知道是否有什么关系?

------解决方案--------------------
会不会是类型不对 不要用int型 用字符型试下
------解决方案--------------------
<s:if test="portOper == 1"> 

------解决方案--------------------
应该可以的,一般都是这样写的.关注...........
------解决方案--------------------
感觉value应该这么取.
<s:set name="portOper" value="#parameters.portOper[0]"/> 

#parameters.id[0]作用相当于request.getParameter("id")
------解决方案--------------------
抱歉,经过再次分析,这不是struts2的bug。一个很容易错误应用的问题。
<s:if test="deptType==1" >下属</s:if>如果你的数据库对应的字段类型为整形,可以这样使用;

<s:if test="deptType=='1'" >下属</s:if>如果你的数据库对应的字段类型为char,可以这样使用;

<s:if test="deptType=='aa'" >下属</s:if>如果你的数据库对应的字段类型为varchar,并且数据库中的字符串都是多余一个字符的字符串,可以这样使用;

<s:if test="deptType==\"1\"" >下属</s:if><s:else>直属</s:else>(测试通过,这样用是最正确的)
------解决方案--------------------
这里纠正一点--13楼wmj2003的方法是正确的.
开始IDE出现警告没去试,后来再Struts2网站的FAQs一栏中找着了解决方法
Why won't the 'if' tag evaluate a one char string
嘿嘿,楼主可以结贴了吧
------解决方案--------------------
引用楼主 phoenix_zd 的帖子:
环境:
Tomcat6
JDK6
Struts2.0.11.1

代码:
L1:  <s:set name="portOper" value="#parameters.portOper"/>
L2:  <s:property value="#portOper" />a
L3:  <s:if test="#portOper == '1'">
L4:    Enter name of port to activate (* = all):
L5:    <s:property value="#portOper" />b
L6:  </s:if>

问题:
第一行用set压入一个值,第二行获取此值显示,可以显示为“1a”,表示“portOper”…

------解决方案--------------------
最正确的判断方法是:
Java code

<s:if test="%{extendedField2 == \"Y\"}">
                                【需要修改】
                            </s:if>
                            <s:else>
                                [审核中]
                            </s:else>