2013-10-07 34 views
2

我認爲我需要使用<s: property>裏面<s:text>,但當然這是不可能的。我需要使用<s: property>裏面<s:text>

以下是情況:我有一個.jsp需要顯示不同數量的actionmessages。通常情況下,你會添加這些actionmessages您的Java類中是這樣的:

action.addActionMessage("this is a string"); 
action.addActionMessage("this is another string"); 

不過,我不喜歡我的硬編碼在Java類的內部消息,我想將它定義一個屬性文件中,這樣的:

Java: 
action.addActionMessage("menu.message1"); 
action.addActionMessage("menu.message2"); 

Properties: 
menu.message1 = this is a string 
menu.message2 = this is another string 

當然,Java的動作類不能進入屬性文件,只是一個Struts標籤可以。所以我的.jsp包含這個:

<s:if test="hasActionMessages()"> 
<s:iterator value="actionMessages"> 

<div class="loginErrorMessage"> 
    <s:text name="<s:property>"/> 
</div> 

</s:iterator> 
</s:if> 

我使用這種迭代構造,所以我可以控制消息的佈局。 <s:property/>應該返回actionmessage本身,我選擇它等於屬性文件中的條目的鍵。如果這種嵌套實際上會工作,我們會得到:

 <s:text name="<s:property/>"/> 
==> <s:text name="menu.message1"/> 
==> this is a string 

我可以使用OGNL來解決這個問題嗎?我嘗試了一些%{}和$ {}的東西,但我不知道值/ var的名稱以獲取valuestack消息的字符串?

Thx!

回答

3

您最初的說法是錯誤的

當然,Java的動作類可以進入屬性文件

您需要延長ActionSupport,那麼你可以簡單地使用getText()方法看在資源包中添加文本。

如果你真的想要去與你的黑客(我強烈建議你不要):

<s:iterator value="actionMessages" var="key"> 
    <div class="loginErrorMessage"> 
     <s:text name="%{#key}"/> 
    </div> 
</s:iterator> 

注:

如果您使用的是ActionSupport.addActionMessage(),則可以使用相應的標籤自動顯示所有動作消息 - <s:actionmessage />。它甚至會檢查它們是否存在,因此你可以把它放在你的jsp中,並忘記它。

+0

雖然我不再使用它,但我只是嘗試了你所建議的代碼,並沒有顯示任何內容。 (所以%{key}評估爲emptry字符串?) – user1884155

+0

@ user1884155抱歉,錯字。糾正。 (忘了'#'爲一個局部變量)。 –

相關問題