2013-10-23 5 views
0

다음 input 태그는 항목이 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 작동합니다. 그것은 긴하지만 (예. 5,000,000,000는) 그것은

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 자바 int 가장 큰 가능한 값보다 크다.

"지원되는 문자 표현의 종류는 문자열, 날짜, 숫자 값입니다 (INT, 실제, 그리고 16 진수), 부울 : 당신이 실제로 long 값을 원하지만 불행히도 봄 문서이 말한다처럼 지금은 보인다 그리고 널. "

long의 언급이 없습니다.

참조 : Spring Expression Language - 특히 섹션 6.5.1. 5000000000L - -


당신은 long 문자의 자바 구문을 사용하여 "운"수 있지만 나는 그것이 작동 할 것이라고 의심한다.