1

Struts 2 <s:if>/<s:else>タグに問題があります。条件が一致しません。それは常にelseブロックになります。

セッターとゲッターを使用して、アクションに変数 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テストが示すようにが a の場合は、二重引用符を使用します。それ以外の場合は、一重引用符で囲まれた単一の文字であるためString、即値は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

ここに解決策があるかもしれません。アクションの結果が「プレーン」で、サブメニューが「文字列」型の場合、つまりページです

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

動作するはずです。

これが提案です。

  1. 以下を使用して、変数が null でないかどうかを確認するために、最初に print "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 に答える