我希望通过Struts 2 textfield输入一个double,但是尊重当前的地区。例如:对于"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 properties文件中定义为
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中发现的唯一提示是:“.类型转换是区域设置的。解决方案是使用上面定义的消息格式,使用getText方法ActionSupport”
(见格式-日期和数字 )
这表明,通过Struts,能够感知地区的提交是可能的,但如何做到呢?任何帮助都很感激..。
发布于 2015-04-03 10:10:07
要回答我自己的问题: Struts自动处理本地化数据输入的转换,因此不需要在我的问题中尝试将格式应用于textfield标记。但是,在提交非en本地化数据输入时,使用原语double时似乎存在错误.因此,我的简单表单提交不起作用,所以我认为我必须应用格式。
“解决方案”是使用Double而不是基元double,但我不确定这是否更适合Struts中可能出现的bug,而不是解决方案。
例如,下面是我的行动:
public class FinanceData extends ActionSupport {
private double myValue;
@Override
public String execute() {
return "SUCCESS";
}
// getter and setter
}
这是我的struts表格:
<s:form action="saveData" namespace="/user">
<s:textfield key="global.amount" name="myValue"/>
<s:submit/>
</s:form>
这是我的struts.xml:
<struts>
<constant name="struts.custom.i18n.resources" value="global" />
<constant name="struts.devMode" value="true" />
<package name="user" namespace="/user" extends="struts-default">
<action name="saveData" class="com.planet.user.action.FinanceData">
<result name="SUCCESS">/dataSummary.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
这样,当在德语会话区域设置中提交值为"3,4“时,提交将失败,并出现消息:字段"myValue”的无效字段值。
如果在Action类中将基元double更改为Double,则submit工作正常,并且将"3,4“正确地写到Double属性(显然变成"3.4")。
虽然故障排除,我似乎记得看到一些问题在struts与双转换器,但我找不到更多的细节。
Struts版本使用: 2.3.20浏览器Chrome。
https://stackoverflow.com/questions/29428888
复制相似问题