1

この問題の解決策は Struts2 に存在しますか?

<s:if test="%{var < 50}">
   <p style="color: red;">The quick brown fox jumped over the lazy brown dog.</p>
</s:if>
<s:elseif test="%{var == 50}">
   <p style="color: blue;">The quick brown fox jumped over the lazy brown dog.</p>
</s:elseif>
<s:elseif test="%{var > 50}">
   <p style="color: pink;">The quick brown fox jumped over the lazy brown dog.</p>
</s:elseif>

理想的には、ここで switch ステートメントを使用したかったのですが、それは存在しないようです。小さな変更を加えて同じ行を入力する代わりに、別の適切な解決策はありますか?

4

2 に答える 2

2

はい、変数を設定し、style属性でそれを参照します。

ただし、これはStruts2とは特に関係ありません。それは常識的なリファクタリングです。

私はあなたのユースケースを知りませんが、それがさらに一歩進んだことを望んでいます。var値は、「下、等しい、上」など、アプリケーションにとって何かを意味する必要があります。値をCSSプロパティに直接結び付けるのではなく、アプリケーションレベルのセマンティクスだけをHTMLで気にする必要があります。同じことを達成するために、CSSをより適切に(そしてより柔軟に)使用します。

<p class="${answerClass}">The quick brown fox jumped over the lazy brown dog.</p>

CSS:

under: {
  color: red;
}

equal: {
  color: blue;
}

greater: {
  color: green;
}

色を変更したことに注意してください。スケールの「反対側」の端にピンクと赤を使用すると、直感に反するように感じますが、その色の範囲で色覚異常がある人にはあまり適していません。

CSSクラス名を選択するためのロジックはJSPに存在する可能性がありますが、IMOは、ビューレイヤーに埋め込まれている場合よりも、さまざまな方法でテストおよび調整できるアプリケーションのJavaコードに配置する方が簡単です。

于 2012-08-29T20:29:38.373 に答える
1

アクションの論理部分を使用することをお勧めします。したがって、メソッドで色の値を評価します。

ただし、JSP でこれを行う必要がある場合は、次のようにすることもできます。

<p style="color: 
   <s:if test="%{var < 50}">
      red
   </s:if>
   <s:elseif test="%{var == 50}">
      blue
   </s:elseif>
   <s:elseif test="%{var > 50}">
      pink
   </s:elseif>
;" >The quick brown fox jumped over the lazy brown dog.</p>

HTML の繰り返しを避けるための方法です。(DRY原則)

于 2012-08-30T16:28:44.847 に答える