我希望通过Struts 2文本字段输入double,但是要尊重当前语言环境。例如:对于“en”,它将被输入为“3.4”(使用一个点),在“de”中它将被输入为“3,4”(使用逗号)。如何在Struts 2中提交语言环境感知值
<s:url id="localeDE" namespace="/" action="locale" >
<s:param name="request_locale" >de</s:param>
</s:url>
和数字格式“format.number”在连接定义和去属性文件
format.number ={0,number,#0.0##}
:
在我的应用程序,该区域通过request_locale参数如设置
但我无法让它工作。我使用下面的输入数字尝试:
<s:textfield key="global.amount" name="%{getFormatted('format.number','myValue')}" />
这不起作用 - 提交不会失败,但价值不分配给目标行动(它仍然是默认的0,0 ),并且将警告“参数:无效的块被忽略”写入日志。
我也试过这样:
<s:textfield key="global.amount" name="%{getText('format.number',{myValue})}" />
这不起作用 - 提交不会失败,但价值不分配给目标行动(它仍然是默认0,0) ,并且向日志中写入警告“参数:无效块被忽略”。
并试用了此:
<s:textfield key="global.amount" name="myValue" />
的提交失败,将重新显示输入页,下面是写入到浏览器(当然是因为3.4的预期,不是3,4):
Invalid field value for field "myValue"
The following is written to the logs:
Apr 03, 2015 9:58:18 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
Avertissement: Error setting expression 'myValue' with value '[Ljava.lang.String;@8a9396'
ognl.MethodFailedException: Method "setMyValue" failed for object [email protected] [java.lang.NoSuchMethodException: com.planet.user.action.FinanceData.setMyValue([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1285)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)
显示在当前区域设置的值被简单,用:
<s:textfield key="global.amount" value="%{getText('format.number',{myValue})}" />
但是我们怎样才能让的值提交 locale-aware?
我找不到任何关于此的示例/线程。我发现的唯一提示是struts doc中的以下内容: “... type conversion is locale aware。解决方法是再次使用上面定义的消息格式,通过使用getText ActionSupport方法”
(请参阅formatting-dates-and-numbers)
这表明区域设置感知的提交对Struts来说可能是开箱即用的,但是如何实现?任何帮助非常感谢...
您应该学习Struts 2的基础知识,它与本地化没有任何关系,但您应仔细阅读您发布的链接。它有代码示例,您可以自行尝试。如果你有一个具体的问题,你可以问这个问题,但这个问题不能帮助未来的读者,因为在它现在的状态下是写的。 – 2015-04-03 08:50:04
感谢您的反馈RomanC。当然你是对的,我在这里错过了一些基本的东西。在发布之前,我曾尝试(很多)来弄清楚该页面上的信息如何提供帮助,同时也搜遍了几本书......但是我没有发现如何以区域敏感的方式提交数据。请你能解释为什么它不与本地化有关吗?用户应该能够根据其语言环境输入值... – Okuti 2015-04-03 08:59:37
本地化和i18n是Struts框架中的一个addhoc主题,也是开发人员使用多年的整洁功能。在使用之前,确保所有其他部件都正常工作。这些文档是为已经知道Struts2是如何工作的开发人员编写的,而且您遇到的问题与i18n无关。 – 2015-04-03 09:14:34