我的JSP页面中有一个下拉菜单,它使用<s:select>
标记实现
<s:select name="priorToApplyingInfo.userProfile.phoneNumbers[0].type"
listKey="key" listValue="value" list="phoneTypes" headerKey="0" headerValue=""/>
现在,下拉菜单中的值来自列表phonetypes
,该列表在HashMap
文件中以.java
的形式实现。
phoneTypes = new LinkedHashMap<Integer, String>();
phoneTypes.put(new Integer(1), getText("HOME"));
// Phone ContactBook category for the business phone
phoneTypes.put(new Integer(DAOHelperFactory.OWNER_PROFILE_PHONE_CATEGORY), getText("WORK"));
phoneTypes.put(new Integer(3), getText("MOBILE"));
phoneTypes.put(new Integer(DAOHelperFactory.OWNER_PROFILE_FAX_CATEGORY), getText("FAX"));
phoneTypes.put(new Integer(5), getText("OTHER"));
preferredContact = new ArrayList<String>();
preferredContact.add(getText("HOME"));
preferredContact.add(getText("WORK"));
preferredContact.add(getText("MOBILE"));
preferredContact.add(getText("FAX"));
preferredContact.add(getText("EMAIL"));
preferredContact.add(getText("OTHER"));
bestContactTime = new ArrayList<String>();
bestContactTime.add(getText("AFTERNOON"));
bestContactTime.add(getText("EVENING"));
bestContactTime.add(getText("MORNING"));
home=home
,work=work
等密钥位于.properties
文件中我正致力于将此页面国际化,而我无法找到获取翻译的方法为了
下拉菜单中的值。
答案 0 :(得分:1)
要更改Struts2应用程序中的区域设置,您需要在某些链接或表单中包含requst_locale
参数。
<s:url var="urlen" includeParams="all" value="">
<s:param name="request_locale">en</s:param>
</s:url>
<s:a href="%{#urlen}">English</s:a>
如果要从操作类更改语言环境,请使用ActionContext
进行设置,并将其置于HTTP会话中。
ActionContext.getContext().setLocale(locale);
session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale);
您也可以在getText
标记的listValue
属性中使用JSP调用<s:select>
方法。
<s:select name="priorToApplyingInfo.userProfile.phoneNumbers[0].type"
list="phoneTypes" headerKey="0" headerValue=""
listKey="key" listValue="%{getText(value)}"/>
答案 1 :(得分:0)
在从资源中检索消息之前,您没有在Struts2中切换语言环境。
getText()
是本地化方法,如果它使用默认文本提供程序作为默认行为,则它会搜索特定于语言环境的键。您可以从操作上下文中获取Struts2使用的当前区域设置,或直接从您的ActionSupport
操作中获取当前区域设置(没有看到您有操作并且扩展了它)。
通常,切换区域设置是通过i18n
拦截器完成的,您可以将参数放入请求request_locale
。但您可以通过更改操作上下文中的区域设置来切换它(确保您运行与当前相同的线程)。
ActionContext.getContext().setLocale(new Locale("es"));
您应该在执行任何getText()
之前运行此代码以获取本地化消息。
答案 2 :(得分:0)
对我而言(就像Aleksandr M在最后一段中写的那样):
<s:select listValue="%{getText(value)}" listKey="key" list="phoneTypes></s:select>
只有我创建了
phoneTypes = new HashMap<String, String>()
phoneTypes.put("HOME", "HOME")
phoneTypes.put("WORK", "WORK")
etc..
在这种情况下,键被省略(你可以在这里写任何东西)和页面显示(翻译)值。 此解决方案不适用于列表,仅适用于map。