2016-01-16 78 views
1

我想查看消息包中是否顯示消息密鑰。所以,下面我試過,但沒有一次成功:Struts 2 s:if with getText

<s:if test=" getText('site.message') == 'site.message'"> 
<s:if test=" getText('site.message').equals('site.message')"> 
<s:if test=" %{getText('site.message').equals('site.message')}"> 

但這種變通辦法正常工作:

<s:text name="site.message" var="test"/> 
<s:if test=" #test=='site.message'"> 
    Please consider: <s:text name="site.message"/> 
</s:if> 

那麼,是否可以省略#TEST變量和做所有作品s:if

回答

2

如果您將<s:text>的正文用作默認訊息,而不是<s:if>標籤的正文,則可能會發生這種情況。從文檔頁面

如果在屬性文件中找不到指定的消息,然後標籤的身體將被用作默認的消息。如果沒有使用主體,則會搜索堆棧,並且如果返回值,則會將其寫入輸出。如果堆棧中未找到任何值,則會寫出消息的密鑰。然後您可以使用另一個鍵設置默認消息。

等效代碼

<s:text name="site.message"><s:text name="error.message"/></s:text> 

還要考慮getText(String aTextName, String defaultValue)的默認值。

獲取基於密鑰的消息,或者,如果未找到消息,則返回提供的默認值。

然後你可以使用

<s:if test="getText('site.message','') != ''"> 
    Please consider: <s:text name="site.message"/> 
</s:if> 
<s:else> 
    <s:text name="error.message"/> 
</s:else> 

hasKey(String key)

檢查檢查的關鍵,如果消息密鑰存在。

<s:if test="hasKey('site.message')"> 
    Please consider: <s:text name="site.message"/> 
</s:if> 
<s:else> 
    <s:text name="error.message"/> 
</s:else> 
+0

我得到這樣的警告'的默認值表達式「請考慮:site.message」進行了評價,並沒有匹配的屬性。文字值'請考慮:site.message'將被使用。'和頁面顯示'請考慮:site.message'。我正在使用struts'2.3.24.1' –

+0

OGNL應該工作,我不知道什麼不適合你。 –

+0

s:text將評估它的主體爲OGNL,因此語法必須是''請考慮'+ getText(「site.message」)'。但它沒有幫助,因爲如果沒有關鍵,結果將是'請考慮:site.message'。 'hasKey'工作正常,語法完全匹配我需要:)謝謝 –