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。 不知道是否有什么关系?
47 个解决方案
#1
会不会是类型不对 不要用int型 用字符型试下
#2
<s:if test="portOper == 1">
#3
应该可以的,一般都是这样写的.关注...........
#4
感觉value应该这么取.
<s:set name="portOper" value="#parameters.portOper[0]"/>
#parameters.id[0]作用相当于request.getParameter("id")
<s:set name="portOper" value="#parameters.portOper[0]"/>
#parameters.id[0]作用相当于request.getParameter("id")
#5
正解,测试成功! 谢谢!
但是很奇怪,我写成“<s:set name="portOper" value="#parameters.portOper"/> ”,property仍然能取到值,为何if test就不能呢? 可能是“#parameters.portOper”取到的是一个数组,property则显示这个数组的第一个元素。 还是好好看书先,唉!
#6
同时也要像daiyefei说的,改成整型才行,如下:
<s:if test="#pooper==1"> 奇怪!
我尝试用<s:if test="#pooper.equals('1’)">也无法通过,看来已经被强制转成int型了。 但是请注意,我是从request parameters中获取portOper,(实际上进到这个页面是从url redirect来的,如xxx.jsp?portOper=1)。 此变量在action中并不存在,也就是说portOper我从来没有定义过它,更不用说它是String还是int了。 而从一般逻辑来说,requet.getPara...方法取到的都是String才对啊!!!
#7
此==,非JAVA中的==
struts2也是开源的,你可以下一个源source研究一下.
struts2也是开源的,你可以下一个源source研究一下.
#8
struts2我觉得就是webwork,换了件马甲而已.
#9
官方文档对这些传值操作写的太少了,用起来不免出现很多麻烦。。
我已经头痛过了
我已经头痛过了
#10
可否说详细点,我现在没时间去研究源码了,呵呵!
#11
L3: <s:if test="#portOper == '1'"> 这个 改成
<s:if test='{#portOper == "1"}'>
#12
前提:数据库中的类型是varchar,pojo中对应的字段的类型也是string。
如果数据库中的数据是整数字符串,例如1、2、3等,那么使用==
<s:if test="deptType==1" >下属</s:if><s:else>直属</s:else>
如果数据库中的数据是字符串,aa、bb、cc等等
那么就要使用<s:if test="deptType=='aa'>下属aa</s:if><s:else>直属</s:else>
如果数据库中既有数字字符串也普通的字符串,那么<s:if test="deptType=='aa' || deptType=='1'" >下属aa</s:if><s:else>直属</s:else> 无法正常的解析,
经过详细的测试,我确认这是struts2的一个bug
如果数据库中的数据是整数字符串,例如1、2、3等,那么使用==
<s:if test="deptType==1" >下属</s:if><s:else>直属</s:else>
如果数据库中的数据是字符串,aa、bb、cc等等
那么就要使用<s:if test="deptType=='aa'>下属aa</s:if><s:else>直属</s:else>
如果数据库中既有数字字符串也普通的字符串,那么<s:if test="deptType=='aa' || deptType=='1'" >下属aa</s:if><s:else>直属</s:else> 无法正常的解析,
经过详细的测试,我确认这是struts2的一个bug
#13
抱歉,经过再次分析,这不是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>(测试通过,这样用是最正确的)
<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>(测试通过,这样用是最正确的)
#14
接分,我还从来没有的过分。哈哈,不知道这次回答是否能够得到?
#15
13楼方法行不通,LZ解决好了没,分享下方法.
#16
这里纠正一点--13楼wmj2003的方法是正确的.
开始IDE出现警告没去试,后来再Struts2网站的FAQs一栏中找着了解决方法
Why won't the 'if' tag evaluate a one char string
嘿嘿,楼主可以结贴了吧
开始IDE出现警告没去试,后来再Struts2网站的FAQs一栏中找着了解决方法
Why won't the 'if' tag evaluate a one char string
嘿嘿,楼主可以结贴了吧
#17
呵呵,这里有好多种说法,
我也来测试了一下,
第一:如果说这里的parameters.portOper是一个数组之类的,后面的s:property得到的值就会让你明白的,
其次,这里所得到的,(仍然可以从s:property这一句可以看到.)也许不同的机器运行出来效果不一样,指定之后得到的值,后卖弄的比较就看看比较的表达了,这里有几种情况,当然,自己也可以摸索出来的
<s:if test="#page2 == 1">
<s:if test="#page2 == '1'">或者<s:if test='#page2 == "1"'>或者是<s:if test="#page2 == \"1\"">
看看怎么用,就自己摸索吧,
最后:关于写法问题,这里有好多种,有的有#,$,{},之类的,可能效果都差不多,还有set的几个属性,name,id,value,scope之类的,当然,只有这个scope有些人可能不太懂,他就是指定你的name变名之后的作用域,也就是哪个范围有效,具体可以网上看看,谢谢.
看了这个帖子,自己花了比较长的时间,来看了一下struts的标签,呵呵,感觉很多都还是比较的不懂,还得努力啊,虽然项目中用到了不少,可是都算是能工作了事,,谢谢了
#18
最后那个有问题,我当时晕头了,哈哈,对不起了,
#19
最后那个有问题,我当时晕头了,哈哈,对不起了,
#20
wmj2003 是正确的。给分100
<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>(测试通过,这样用是最正确的)
<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>(测试通过,这样用是最正确的)
#21
我刚好碰到这些问题,按上面这个测试了一把,是对的,非常感谢!
#22
学习
#23
最正确的判断方法是:
其中extendedField2 是遍历list时得到的属性,如果比较的是定义的一个变量,则这样:
注意,一定要使用\"待对比字符串\"这样的格式转义"符号。
<s:if test="%{extendedField2 == \"Y\"}">
【需要修改】
</s:if>
<s:else>
[审核中]
</s:else>
其中extendedField2 是遍历list时得到的属性,如果比较的是定义的一个变量,则这样:
<s:property value="extendedField2" />
<s:set name="nowValue" value="%{ extendedField2 }" />
输出: 【${nowValue}】
<s:if test="%{#nowValue == \"Y\"}">
【需要修改】
</s:if>
<s:else>
[审核中]
</s:else>
注意,一定要使用\"待对比字符串\"这样的格式转义"符号。
#24
13的对的
#25
我怎么没有测试成功,用13楼的,rp问题?
#26
代码改为如下:
L1: <s:if test="="#parameters.portOper[0] == 1">
L2: Enter name of port to activate (* = all):
L3: <s:property value="#portOper" />b
L4: </s:if>
或
L1: <s:if test="="#parameters.portOper[0] == \"1\"">
L2: Enter name of port to activate (* = all):
L3: <s:property value="#portOper" />b
L4: </s:if>
都是可行的。
L1: <s:if test="="#parameters.portOper[0] == 1">
L2: Enter name of port to activate (* = all):
L3: <s:property value="#portOper" />b
L4: </s:if>
或
L1: <s:if test="="#parameters.portOper[0] == \"1\"">
L2: Enter name of port to activate (* = all):
L3: <s:property value="#portOper" />b
L4: </s:if>
都是可行的。
#27
不必使用如下代码:
L1: <s:set name="portOper" value="#parameters.portOper"/>
L2: <s:property value="#portOper" />a
L1: <s:set name="portOper" value="#parameters.portOper"/>
L2: <s:property value="#portOper" />a
#28
26楼的方法是正确的, 27楼的s:property是没问题的,但用于if test 就不行了。
看看:
http://struts.apache.org/2.x/docs/why-doesnt-the-if-tag-evaluate-test
看看:
http://struts.apache.org/2.x/docs/why-doesnt-the-if-tag-evaluate-test
#29
正确方法是 <s:if test='dataType=="D"'>
#30
<s:if test="deptType==1" >下属 </s:if>如果你的数据库对应的字段类型为整形,可以这样使用;
<s:if test="deptType=='1'" >下属 </s:if>如果你的数据库对应的字段类型为char,可以这样使用;
<s:if test="deptType=='aa'" >下属 </s:if>如果你的数据库对应的字段类型为varchar,并且数据库中的字符串都是多余一个字符的字符串,可以这样使用;
1.<s:if test="deptType==\"1\"" >下属 </s:if> <s:else>直属 </s:else>(测试通过,这样用是最正确的)
2.<s:if test='deptType=="1"' >下属 </s:if> <s:else>直属 </s:else>(测试通过,这样用是最正确的)
這些都是測試通過的﹗
<s:if test="deptType=='1'" >下属 </s:if>如果你的数据库对应的字段类型为char,可以这样使用;
<s:if test="deptType=='aa'" >下属 </s:if>如果你的数据库对应的字段类型为varchar,并且数据库中的字符串都是多余一个字符的字符串,可以这样使用;
1.<s:if test="deptType==\"1\"" >下属 </s:if> <s:else>直属 </s:else>(测试通过,这样用是最正确的)
2.<s:if test='deptType=="1"' >下属 </s:if> <s:else>直属 </s:else>(测试通过,这样用是最正确的)
這些都是測試通過的﹗
#31
要是在ec:table 里面呢 ,呵呵 那就更好玩了 <s:if test="${abc}==0">是正常的在ec:table里面
#32
正需要这方面资料,感谢楼主和各位高手啦
#33
<s:if test="#rquest.right.rt_addOrder==1">checked</s:if>
为啥不执行啊,我数据库中的字段也是整型的
为啥不执行啊,我数据库中的字段也是整型的
#34
23楼的测试完全通过.
#35
11楼的是正确的,通过了
#36
恩,确实不错的,好贴
#37
学习下
#38
ddd
#39
这个正好用到了,学习了
#40
23楼的写法对。
#41
反复测试,如果从url获得的querystring参数,只有<s:if test="="#parameters.portOper[0] == 1"> 可以通过,其他的只要没带[0]都不行
不明白为什么....
不明白为什么....
#42
我也是遇到想通的问题,action里面是Integer 但是<s:if test="searchType==1" />总为false
#43
1111111111
#44
学习了······
#45
多我很有帮助,学习了
#46
很有帮助。
#47
对我很有帮助
#1
会不会是类型不对 不要用int型 用字符型试下
#2
<s:if test="portOper == 1">
#3
应该可以的,一般都是这样写的.关注...........
#4
感觉value应该这么取.
<s:set name="portOper" value="#parameters.portOper[0]"/>
#parameters.id[0]作用相当于request.getParameter("id")
<s:set name="portOper" value="#parameters.portOper[0]"/>
#parameters.id[0]作用相当于request.getParameter("id")
#5
正解,测试成功! 谢谢!
但是很奇怪,我写成“<s:set name="portOper" value="#parameters.portOper"/> ”,property仍然能取到值,为何if test就不能呢? 可能是“#parameters.portOper”取到的是一个数组,property则显示这个数组的第一个元素。 还是好好看书先,唉!
#6
同时也要像daiyefei说的,改成整型才行,如下:
<s:if test="#pooper==1"> 奇怪!
我尝试用<s:if test="#pooper.equals('1’)">也无法通过,看来已经被强制转成int型了。 但是请注意,我是从request parameters中获取portOper,(实际上进到这个页面是从url redirect来的,如xxx.jsp?portOper=1)。 此变量在action中并不存在,也就是说portOper我从来没有定义过它,更不用说它是String还是int了。 而从一般逻辑来说,requet.getPara...方法取到的都是String才对啊!!!
#7
此==,非JAVA中的==
struts2也是开源的,你可以下一个源source研究一下.
struts2也是开源的,你可以下一个源source研究一下.
#8
struts2我觉得就是webwork,换了件马甲而已.
#9
官方文档对这些传值操作写的太少了,用起来不免出现很多麻烦。。
我已经头痛过了
我已经头痛过了
#10
可否说详细点,我现在没时间去研究源码了,呵呵!
#11
L3: <s:if test="#portOper == '1'"> 这个 改成
<s:if test='{#portOper == "1"}'>
#12
前提:数据库中的类型是varchar,pojo中对应的字段的类型也是string。
如果数据库中的数据是整数字符串,例如1、2、3等,那么使用==
<s:if test="deptType==1" >下属</s:if><s:else>直属</s:else>
如果数据库中的数据是字符串,aa、bb、cc等等
那么就要使用<s:if test="deptType=='aa'>下属aa</s:if><s:else>直属</s:else>
如果数据库中既有数字字符串也普通的字符串,那么<s:if test="deptType=='aa' || deptType=='1'" >下属aa</s:if><s:else>直属</s:else> 无法正常的解析,
经过详细的测试,我确认这是struts2的一个bug
如果数据库中的数据是整数字符串,例如1、2、3等,那么使用==
<s:if test="deptType==1" >下属</s:if><s:else>直属</s:else>
如果数据库中的数据是字符串,aa、bb、cc等等
那么就要使用<s:if test="deptType=='aa'>下属aa</s:if><s:else>直属</s:else>
如果数据库中既有数字字符串也普通的字符串,那么<s:if test="deptType=='aa' || deptType=='1'" >下属aa</s:if><s:else>直属</s:else> 无法正常的解析,
经过详细的测试,我确认这是struts2的一个bug
#13
抱歉,经过再次分析,这不是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>(测试通过,这样用是最正确的)
<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>(测试通过,这样用是最正确的)
#14
接分,我还从来没有的过分。哈哈,不知道这次回答是否能够得到?
#15
13楼方法行不通,LZ解决好了没,分享下方法.
#16
这里纠正一点--13楼wmj2003的方法是正确的.
开始IDE出现警告没去试,后来再Struts2网站的FAQs一栏中找着了解决方法
Why won't the 'if' tag evaluate a one char string
嘿嘿,楼主可以结贴了吧
开始IDE出现警告没去试,后来再Struts2网站的FAQs一栏中找着了解决方法
Why won't the 'if' tag evaluate a one char string
嘿嘿,楼主可以结贴了吧
#17
呵呵,这里有好多种说法,
我也来测试了一下,
第一:如果说这里的parameters.portOper是一个数组之类的,后面的s:property得到的值就会让你明白的,
其次,这里所得到的,(仍然可以从s:property这一句可以看到.)也许不同的机器运行出来效果不一样,指定之后得到的值,后卖弄的比较就看看比较的表达了,这里有几种情况,当然,自己也可以摸索出来的
<s:if test="#page2 == 1">
<s:if test="#page2 == '1'">或者<s:if test='#page2 == "1"'>或者是<s:if test="#page2 == \"1\"">
看看怎么用,就自己摸索吧,
最后:关于写法问题,这里有好多种,有的有#,$,{},之类的,可能效果都差不多,还有set的几个属性,name,id,value,scope之类的,当然,只有这个scope有些人可能不太懂,他就是指定你的name变名之后的作用域,也就是哪个范围有效,具体可以网上看看,谢谢.
看了这个帖子,自己花了比较长的时间,来看了一下struts的标签,呵呵,感觉很多都还是比较的不懂,还得努力啊,虽然项目中用到了不少,可是都算是能工作了事,,谢谢了
#18
最后那个有问题,我当时晕头了,哈哈,对不起了,
#19
最后那个有问题,我当时晕头了,哈哈,对不起了,
#20
wmj2003 是正确的。给分100
<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>(测试通过,这样用是最正确的)
<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>(测试通过,这样用是最正确的)
#21
我刚好碰到这些问题,按上面这个测试了一把,是对的,非常感谢!
#22
学习
#23
最正确的判断方法是:
其中extendedField2 是遍历list时得到的属性,如果比较的是定义的一个变量,则这样:
注意,一定要使用\"待对比字符串\"这样的格式转义"符号。
<s:if test="%{extendedField2 == \"Y\"}">
【需要修改】
</s:if>
<s:else>
[审核中]
</s:else>
其中extendedField2 是遍历list时得到的属性,如果比较的是定义的一个变量,则这样:
<s:property value="extendedField2" />
<s:set name="nowValue" value="%{ extendedField2 }" />
输出: 【${nowValue}】
<s:if test="%{#nowValue == \"Y\"}">
【需要修改】
</s:if>
<s:else>
[审核中]
</s:else>
注意,一定要使用\"待对比字符串\"这样的格式转义"符号。
#24
13的对的
#25
我怎么没有测试成功,用13楼的,rp问题?
#26
代码改为如下:
L1: <s:if test="="#parameters.portOper[0] == 1">
L2: Enter name of port to activate (* = all):
L3: <s:property value="#portOper" />b
L4: </s:if>
或
L1: <s:if test="="#parameters.portOper[0] == \"1\"">
L2: Enter name of port to activate (* = all):
L3: <s:property value="#portOper" />b
L4: </s:if>
都是可行的。
L1: <s:if test="="#parameters.portOper[0] == 1">
L2: Enter name of port to activate (* = all):
L3: <s:property value="#portOper" />b
L4: </s:if>
或
L1: <s:if test="="#parameters.portOper[0] == \"1\"">
L2: Enter name of port to activate (* = all):
L3: <s:property value="#portOper" />b
L4: </s:if>
都是可行的。
#27
不必使用如下代码:
L1: <s:set name="portOper" value="#parameters.portOper"/>
L2: <s:property value="#portOper" />a
L1: <s:set name="portOper" value="#parameters.portOper"/>
L2: <s:property value="#portOper" />a
#28
26楼的方法是正确的, 27楼的s:property是没问题的,但用于if test 就不行了。
看看:
http://struts.apache.org/2.x/docs/why-doesnt-the-if-tag-evaluate-test
看看:
http://struts.apache.org/2.x/docs/why-doesnt-the-if-tag-evaluate-test
#29
正确方法是 <s:if test='dataType=="D"'>
#30
<s:if test="deptType==1" >下属 </s:if>如果你的数据库对应的字段类型为整形,可以这样使用;
<s:if test="deptType=='1'" >下属 </s:if>如果你的数据库对应的字段类型为char,可以这样使用;
<s:if test="deptType=='aa'" >下属 </s:if>如果你的数据库对应的字段类型为varchar,并且数据库中的字符串都是多余一个字符的字符串,可以这样使用;
1.<s:if test="deptType==\"1\"" >下属 </s:if> <s:else>直属 </s:else>(测试通过,这样用是最正确的)
2.<s:if test='deptType=="1"' >下属 </s:if> <s:else>直属 </s:else>(测试通过,这样用是最正确的)
這些都是測試通過的﹗
<s:if test="deptType=='1'" >下属 </s:if>如果你的数据库对应的字段类型为char,可以这样使用;
<s:if test="deptType=='aa'" >下属 </s:if>如果你的数据库对应的字段类型为varchar,并且数据库中的字符串都是多余一个字符的字符串,可以这样使用;
1.<s:if test="deptType==\"1\"" >下属 </s:if> <s:else>直属 </s:else>(测试通过,这样用是最正确的)
2.<s:if test='deptType=="1"' >下属 </s:if> <s:else>直属 </s:else>(测试通过,这样用是最正确的)
這些都是測試通過的﹗
#31
要是在ec:table 里面呢 ,呵呵 那就更好玩了 <s:if test="${abc}==0">是正常的在ec:table里面
#32
正需要这方面资料,感谢楼主和各位高手啦
#33
<s:if test="#rquest.right.rt_addOrder==1">checked</s:if>
为啥不执行啊,我数据库中的字段也是整型的
为啥不执行啊,我数据库中的字段也是整型的
#34
23楼的测试完全通过.
#35
11楼的是正确的,通过了
#36
恩,确实不错的,好贴
#37
学习下
#38
ddd
#39
这个正好用到了,学习了
#40
23楼的写法对。
#41
反复测试,如果从url获得的querystring参数,只有<s:if test="="#parameters.portOper[0] == 1"> 可以通过,其他的只要没带[0]都不行
不明白为什么....
不明白为什么....
#42
我也是遇到想通的问题,action里面是Integer 但是<s:if test="searchType==1" />总为false
#43
1111111111
#44
学习了······
#45
多我很有帮助,学习了
#46
很有帮助。
#47
对我很有帮助