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属性中引用它。

然而,这与 Struts 2 无关。这是常识性的重构。

我不知道您的用例,但我希望看到它更进一步:该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 的方法。(干燥原理)

于 2012-08-30T16:28:44.847 回答