2013-03-01 33 views
0

我試圖在Struts2 Web應用程序中渲染幾個單選按鈕。變量在使用getText時具有空值,但在渲染單選按鈕時不具有空值

每個單選按鈕的value是一個整數,其關聯的標籤應該是一個國際化的文本,它隨着值的變化而變化。 i18n密鑰的格式爲Common.eventTypeId.<<integer value>>(例如,Common.eventTypeId.28,Common.eventTypeId.29等)。

但是,當我訪問該頁面時,標籤不會被翻譯,因爲有錯誤的鍵:Common.eventTypeId.null。讓我感到困惑的是,用於構建i18n鍵的相同變量呈現爲單選按鈕的value

以下是生成HTML代碼的代碼片段。 eventTypeIdsList<Integer>含有3個要素:28,29和31

<s:iterator value="eventTypeIds" var="eTypeId"> 
    <div class="frm-field"> 
     <s:set var="label" value="%{getText('Common.eventTypeId.' + eTypeId)}"/> 
     <s:radio name="currentActivity.eventTypeId" list="eTypeId" listValue="label"/> 
    </div> 
</s:iterator> 

相關I18N鍵:

Common.eventTypeId.29 = CAA 
Common.eventTypeId.28 = Practical 
Common.eventTypeId.31 = Non-assessable activity 

這正在生成現在的實際HTML:

<div class="frm-field"> 
    <input type="radio" value="29" checked="checked" id="frm-activity_currentActivity_eventTypeId29" name="currentActivity.eventTypeId"> 
    <label for="frm-activity_currentActivity_eventTypeId29">Common.eventTypeId.null</label> 
</div> 
<div class="frm-field"> 
    <input type="radio" value="28" id="frm-activity_currentActivity_eventTypeId28" name="currentActivity.eventTypeId"> 
    <label for="frm-activity_currentActivity_eventTypeId28">Common.eventTypeId.null</label> 
</div> 
<div class="frm-field"> 
    <input type="radio" value="31" id="frm-activity_currentActivity_eventTypeId31" name="currentActivity.eventTypeId"> 
    <label for="frm-activity_currentActivity_eventTypeId31">Common.eventTypeId.null</label> 
</div> 

這將是預期的HTML:

<div class="frm-field"> 
    <input type="radio" value="29" checked="checked" id="frm-activity_currentActivity_eventTypeId29" name="currentActivity.eventTypeId"> 
    <label for="frm-activity_currentActivity_eventTypeId29">CAA</label> 
</div> 
<div class="frm-field"> 
    <input type="radio" value="28" id="frm-activity_currentActivity_eventTypeId28" name="currentActivity.eventTypeId"> 
    <label for="frm-activity_currentActivity_eventTypeId28">Practical</label> 
</div> 
<div class="frm-field"> 
    <input type="radio" value="31" id="frm-activity_currentActivity_eventTypeId31" name="currentActivity.eventTypeId"> 
    <label for="frm-activity_currentActivity_eventTypeId31">Non-assessable activity</label> 
</div> 

請注意,正在使用eTypeId變量正確顯示整數值,但構建i18n密鑰時該變量爲空。我錯過了什麼?我誤解了s:radio標籤的使用情況嗎?

回答

3

您在使用eTypeId var之前缺少# var <s:set>標籤。

<s:set var="label" value="%{getText('Common.eventTypeId.' + #eTypeId)}"/> 

BTW <s:radio>發生在list屬性迭代源,因此您可以使用無線標籤內的eventTypeIds列表,並獲得翻譯文本與listValue屬性和top關鍵字。

<s:radio name="currentActivity.eventTypeId" list="eventTypeIds" 
       listValue="%{getText('Common.eventTypeId.' + top)}"/> 
+0

謝謝!我知道我忽略了一些代碼。 – orique 2013-03-01 10:45:32