我希望通过 Struts 2 文本字段输入双精度值,但要尊重当前的语言环境。示例:对于“en”,它将输入为“3.4”(使用点),在“de”中,它将输入为“3,4”(使用逗号)。
在我的应用程序中,区域设置是通过 request_locale 参数设置的,例如:
<s:url id="localeDE" namespace="/" action="locale" >
<s:param name="request_locale" >de</s:param>
</s:url>
数字格式“format.number”在 en 和 de 属性文件中定义为
format.number ={0,number,#0.0##}
但我无法让它发挥作用。我尝试使用以下方法输入号码:
<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 com.planet.user.action.FinanceData@326ce2 [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})}" />
但我们怎样才能让这个值成为已提交区域设置感知?
我找不到任何与此相关的示例/线程。我发现的唯一提示是 struts 文档中的以下内容:
“...类型转换是区域设置感知的。解决方案是通过使用 ActionSupport 的 getText 方法再次使用上面定义的消息格式”
(see 格式化日期和数字 https://struts.apache.org/docs/formatting-dates-and-numbers.html )
这表明 Struts 可以开箱即用地进行区域设置感知提交,但如何实现呢?非常感谢任何帮助...