我在使用Struts 2 <s:if>
/ <s:else>
标签时出现问题 - 条件不匹配。它总是会阻止。
我的动作中有一个变量subMenu有setter和getter。我在行动中将变量设置为“1”。
我尝试了以下每种语法:
<s:if test="%{#subMenu == \"1\"}">
This is Submenu 1
</s:if>
<s:if test="subMenu == '1'">
You have selected 1.
</s:if>
<s:if test="%{#subMenu == '1'}">
This is Submenu 1
</s:if>
<s:if test="%{subMenu == '1'}">
This is Submenu 1
</s:if>
答案 0 :(得分:2)
如果subMenu
是测试所暗示的String
,请使用双引号,否则立即值将被解释为char
(不是String
),因为它是单引号中的单个字符。
<s:if test='%{subMenu == "1"}'>
This is Submenu 1
</s:if>
请注意,我翻了哪些引号用于哪里。这就是OGNL的工作原理。
备选方案包括使用实际整数,或者使用超出“1”,“2”,“3”等更容易理解的系统,并使用上下文有意义的名称而不是让人们考虑它。
答案 1 :(得分:1)
这可能是解决方案。 如果您的操作结果为“plain”且subMenu为“string”类型,则表示该页面为
<s:if test="subMenu == '1'">test</s:if>
应该有用。
这是建议。
首先尝试打印“subMenu”,如果变量不为null,则使用:
<s:property value="subMenu"/>
检查您的操作类,如果您的结果不是* .jsp,但* .action,您将丢失变量,请尝试将变量添加为如下参数:
<result name="success">
<param name="subMenu">${subMenu}</param>
<param name="location">*.action</param>
...
</result>
答案 2 :(得分:0)
对于单个字符struts,如果比较不起作用。容易解决方案是尝试使用字符串而不是单个字符