<s:if>标签不起作用</s:if>

时间:2012-06-26 10:49:24

标签: java struts2

我在使用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>

3 个答案:

答案 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>

应该有用。

这是建议。

  1. 首先尝试打印“subMenu”,如果变量不为null,则使用:

    <s:property value="subMenu"/>
    
  2. 检查您的操作类,如果您的结果不是* .jsp,但* .action,您将丢失变量,请尝试将变量添加为如下参数:

    <result name="success">
        <param name="subMenu">${subMenu}</param>
        <param name="location">*.action</param>
        ...
    </result>
    

答案 2 :(得分:0)

对于单个字符struts,如果比较不起作用。容易解决方案是尝试使用字符串而不是单个字符