2012-08-29 143 views
1

在Struts2中是否存在对这个问题的解决方案?struts2 switch语句

<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语句,但看起来并不存在。是否有另一种合适的解决方案,而不是通过轻微更改输入相同的行?

+0

Ruby on Rails和HAML:Heaven – Chloe

回答

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; 
} 

注意,我改变了颜色,用粉红色和红色的“对立”规模的两端在我看来是反直觉的,并没有那么大的那些有该颜色范围内的色盲。

可以存在于JSP,但是国际海事组织比如果它嵌入它更容易把它放在应用程序的Java代码,它可以测试和在更广泛的方式调整了选择CSS类名的逻辑在视图层。

+0

这不是我能给出的最好例子。基本上,我有一张表格,并且基于每个单元格中的值,它应该被着色为绿色,琥珀色或红色......这似乎是我应该在JSP中检查而不是在Action中检查的东西。 – user1628194

+0

@ user1628194我所说的一切依然存在;您将演示细节与应用程序语义AFAICT混合在一起。无论如何,根据另一个值设置一个值是你应该做的事情的根源。我相信你做这件事的水平是脆弱的,并且从根本上破坏了,但这与重构本身是分开的问题。 –

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原理)

+0

您是否可以通过说明“行动中的逻辑部分”的使用来更新答案? – Stephan