【问题标题】:<s:if> tag is not working<s:if> 标签不工作
【发布时间】:2012-06-26 10:49:24
【问题描述】:

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

我的操作中有一个带有 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>

【问题讨论】:

    标签: java struts2


    【解决方案1】:

    如果测试表明subMenuString,请使用双引号,否则立即值将被解释为char(而不是String),因为它是单引号中的单个字符。

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

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

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

    【讨论】:

      【解决方案2】:

      这可能是解决方案。 如果您的操作结果是“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>
        

      【讨论】:

      • 它不会,因为 OGNL 解析单引号包围的单字符实体的方式。
      • @DaveNewton 嗨戴夫,实际上我自己在我的 strut2 项目中使用了“字符串”,而且效果很好。它并不意味着包围一个字符,而是与“”不同。
      • OGNL 将单引号中的单个字符视为字符,而不是字符串——这就是 OP 比较失败的原因。如果需要,我可以向您展示显示差异的运行代码,以及解释它的 OGNL 文档。
      • @DaveNewton 那会很好。非常感谢你,如果你能告诉我这个。因为我真的在运行项目中使用 OK 。 :-)
      • 你没有理由不能——那不是单引号中的单个字符。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-29
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多