2012-08-29 213 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