java - Spring 形式的 Hashmap

标签 java jsp spring-mvc hashmap spring-el

我使用以下输入标记,其中条目是 myMap 的条目。

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

以及以下对象

Map<Long, MyViewModel> myMap;

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

如果entry.key的值为整数,则一切正常。但如果它很长(例如 5000000000),它就会崩溃

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(Stephen 的建议)时,我收到另一个错误。

<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)
...

最佳答案

数字 5,000,000,000 大于 Java int 的最大可能值。现在看起来您实际上想要一个 long 值,但不幸的是 Spring 文档是这样说的:

"The types of literal expressions supported are strings, dates, numeric values (int, real, and hex), boolean and null."

没有提及

引用:Spring Expression Language - 特别是第 6.5.1 节。

<小时/>

通过使用 Java 语法来处理 long 文字 - 5000000000L,您可能会“幸运” - 但我怀疑它是否有效。

关于java - Spring 形式的 Hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19540206/

相关文章:

java - 无法在我的代码中访问 DatePicker.ValidationCallback

java - 在Java中将二进制字符串转换为字节数组

java - Android 模拟器未启动。 browserName 总是抛出错误,但不包含在大写字母中

java - Spring Web MVC 总是返回错误 500

java - 在 Spring 过滤器链中的 session 管理过滤器中获取 Firewalledrequest ClasscastException

java - 使用 Java Spring 标签的 URI

Java:获取所有方法参数作为对象数组

html - 使用 jsp 的动态 html 表单

javascript - 动态单击复选框并在列表中添加电子邮件地址并使用 JavaScript 删除重复的电子邮件地址

java - web.xml 忽略主 JSP 文件