1

我在使用 Struts 2 <s:if>/<s:else>标签时遇到问题——条件不匹配。它总是会阻塞。

我的操作中有一个带有 setter 和 getter 的变量 subMenu。我在操作中将变量设置为“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>
4

3 回答 3

2

如果subMenu是 aString如测试所示,使用双引号,否则立即值将被解释为 a char(not String),因为它是单引号中的单个字符。

<s:if test='%{subMenu == "1"}'>
  This is Submenu 1
</s:if>

请注意,我已经翻转了哪些引号在哪里使用。这就是 OGNL 的工作原理。

替代方案包括使用实际整数,或使用除“1”、“2”、“3”等之外的更易于推理的系统,并使用具有上下文意义的名称而不是让人们思考它。

于 2012-06-26T12:49:50.190 回答
1

这可能是解决方案。如果您的操作结果是“plain”并且 subMenu 是“string”类型,这意味着它是一个页面

<s:if test="subMenu == '1'">test</s:if>

应该管用。

这是建议。

  1. 首先尝试打印“subMenu”以检查变量是否不为空,方法是使用:

    <s:property value="subMenu"/>
    
  2. 检查你的动作类,如果你的结果不是*.jsp,而是*.action,你会丢失你的变量,尝试像这样添加你的变量作为参数:

    <result name="success">
        <param name="subMenu">${subMenu}</param>
        <param name="location">*.action</param>
        ...
    </result>
    
于 2012-06-26T11:06:17.607 回答
0

如果比较不起作用,则对于单个字符支柱。简单的解决方案是尝试使用字符串而不是单个字符

于 2013-03-15T08:25:36.293 回答