0

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

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

但是,当我访问该页面时,标签不会被翻译,因为有错误的键:Common.eventTypeId.null. 令我困惑的是,用于构建 i18n 键的相同变量呈现为value单选按钮的 ok。

这是生成 HTML 代码的片段。eventTypeIds是 aList<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 标签的用法吗?

4

1 回答 1

3

在标签内#使用eTypeIdvar之前您丢失了。<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)}"/> 
于 2013-03-01T10:35:37.030 回答