2013-10-23 58 views
0

我使用以下输入标记,其中条目是myMap的条目。Spring形式的散列图

<form:input path="myMap[${entry.key}].parameters[${counter}].value" /> 

及以下对象

Map<Long, MyViewModel> myMap; 

public class MyViewModel { 
private List<My2ViewModel> parameters; 
... 

如果entry.key的值是一个整数,一切正常prefectly。但是,如果它是一个长期的(例如:50亿),它崩溃

org.springframework.expression.spel.SpelParseException: EL1035E:(pos 14): The value '5000000000' cannot be parsed as an int 
at org.springframework.expression.spel.ast.Literal.getIntLiteral(Literal.java:79) 
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatLiteral(InternalSpelExpressionParser.java:688) 
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatStartNode(InternalSpelExpressionParser.java:429) 
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPrimaryExpression(InternalSpelExpressionParser.java:282) 
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatUnaryExpression(InternalSpelExpressionParser.java:275) 
... 
Caused by: java.lang.NumberFormatException: For input string: "5000000000" 

当我添加一个L(斯蒂芬的建议),我得到一个其它的错误。

<form:input path="myMap[${entry.key}L].parameters[${counter}].value" /> 

java.lang.IllegalArgumentException: The field type is required 
at org.springframework.util.Assert.notNull(Assert.java:112) 
at org.springframework.webflow.mvc.view.ConvertingPropertyEditorAdapter.<init>(ConvertingPropertyEditorAdapter.java:48) 
at org.springframework.webflow.mvc.view.BindingModel.findSpringConvertingPropertyEditor(BindingModel.java:277) 
at org.springframework.webflow.mvc.view.BindingModel.findEditor(BindingModel.java:183) 
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:125) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:179) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:199) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:165) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:152) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:143) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:127) 
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:421) 
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142) 
... 
+0

任何机会,数字转换为指数格式 – upog

回答

2

数量5,000,000,000比为Java int最大可能值。现在看来,你需要的是一个long价值,可惜Spring文档这样说:

“的类型支持字面表达的是字符串,日期,数值(INT,REAL,和十六进制),布尔和空。“

没有提及long

参考:Spring Expression Language - 特别是第6.5.1节。


你可能会“很幸运”通过使用Java语法为long文字 - 5000000000L - 但我怀疑这会工作。