我正在尝试在Struts2 Web应用程序中渲染一些单选按钮。
每个单选按钮的value
是一个整数,其关联的标签应该是一个i18n文本,它随着值的变化而变化。 i18n键的格式为Common.eventTypeId.<<integer value>>
,(例如Common.eventTypeId.28
,Common.eventTypeId.29
等。
然而,当我访问页面时,由于键错误,标签不会被翻译:{{1}}。让我感到困惑的是,用于构建i18n键的相同变量可以像单选按钮的Common.eventTypeId.null
一样呈现。
以下是生成HTML代码的代码段。 value
是eventTypeIds
,包含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:无线电标签的用法?
答案 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)}"/>