使用getText时变量的值为null,而渲染radiobutton时则不是

时间:2013-03-01 10:13:50

标签: java struts2

我正在尝试在Struts2 Web应用程序中渲染一些单选按钮。

每个单选按钮的value是一个整数,其关联的标签应该是一个i18n文本,它随着值的变化而变化。 i18n键的格式为Common.eventTypeId.<<integer value>>,(例如Common.eventTypeId.28Common.eventTypeId.29等。

然而,当我访问页面时,由于键错误,标签不会被翻译:{{1​​}}。让我感到困惑的是,用于构建i18n键的相同变量可以像单选按钮的Common.eventTypeId.null一样呈现。

以下是生成HTML代码的代码段。 valueeventTypeIds,包含3个元素:28,29和31。

List<Integer>

相关的i18n键:

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

这是现在生成的实际HTML:

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>

请注意,使用<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> 变量正确显示整数值,但在构建i18n密钥时该变量为null。我错过了什么?我是否误解了s:无线电标签的用法?

1 个答案:

答案 0 :(得分:3)

#内嵌eTypeId个标记之前,您遗漏了<s:set>

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

BTW <s:radio>获取list属性中的可迭代来源,因此您可以在无线电广告代码中使用eventTypeIds列表,并获取具有listValue属性和top的翻译文本} keyword。

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