Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC绑定问题_Java_Spring_Spring Mvc - Fatal编程技术网

Java SpringMVC绑定问题

Java SpringMVC绑定问题,java,spring,spring-mvc,Java,Spring,Spring Mvc,在我的SpringMVC应用程序中,我有用户可以创建的级别。对于这些级别,级别需要满足各种要求(需要汽车、电话等) 创建新级别时,用户可以看到所有这些需求的列表,并将这些需求移动到“必需的需求”区域(通过单击它们将它们从一个div来回移动到另一个div)。它看起来有点像这个jsp <div id="allRequirements"> <c:forEach var="requirement" items="${RequirementList}">

在我的SpringMVC应用程序中,我有用户可以创建的级别。对于这些级别,级别需要满足各种要求(需要汽车、电话等)

创建新级别时,用户可以看到所有这些需求的列表,并将这些需求移动到“必需的需求”区域(通过单击它们将它们从一个div来回移动到另一个div)。它看起来有点像这个jsp

<div id="allRequirements">
    <c:forEach var="requirement" items="${RequirementList}">
         <div class="requirements">
             <input type="hidden" value="${requirement.id}" name="id"/>
             <h2><c:out value="${requirement.name}"/></h2>
         </div>
    </c:foreach>
</div>
<div id="requiredRequirements"></div>
控制器中此添加功能的方法如下所示

@RequestMapping(value = "/level/addNewLevel", method = RequestMethod.POST)
public String addNewLevel(@ModelAttribute("level") Level level, BindingResult result, Model model)
{
    validator.validate(level, result);
    if(result.hasErrors()) {
        //show errors
    }
    else {
        //add level
    }
}
那么现在来谈谈我的问题:

我可以得到级别的名称、分数、id等,但要求根本没有达到。在提交表单时,我尝试在requiredRequirements中的div中插入
,然后执行类似操作

String[] requiredRequirements = ((String) result.getFieldValue("requirements")).split(",");
level.setRequirements(getRequirementsFromIDs(requiredRequirements));
在我调用validate方法之前,这一切都很好,因为在绑定结果中,需求只是一个字符串列表(来自名为requirements的隐藏字段),因此它会引发类型不匹配。我曾想过写一个属性编辑器,但这似乎是一个解决问题的技巧

我想知道是否有人对如何解决这个问题有任何建议

提前感谢您为这种情况编写一个Property编辑器(或更好的Spring 3转换器),这不是一个黑客行为。这就是属性编辑器的用途。因此,这只是黑客的解决方案,而不是黑客的解决方案


但是有一个更好的方法来处理列表问题。因为Spring 3转换器用于单个对象,如(
字符串
(id)到
需求
)可以通过Spring自动应用于
需求
的列表。因此,您只需要编写一个转换器,该转换器可以将id的
字符串
表示形式转换为
要求
。Spring也会将此应用于列表。

属性编辑器是如何做到这一点的,为什么您认为这是一种黑客行为?您尝试过Spring:bind吗@因为这似乎是对我的情况的一种攻击,需求对象的内容必须来自某个地方。您可以告诉spring如何将一个需求ID转换为一个完整的需求(PropertyEdit),或者将需求的全部内容放到POST中。因此,我需要做的就是编写一个转换器,将ID的字符串表示形式转换为一个需求。然后春天会为我做剩下的事。那么,它会将字符串列表转换为需求列表吗?您需要注册它们。-是的,Spring也将把它应用到列表中。
String[] requiredRequirements = ((String) result.getFieldValue("requirements")).split(",");
level.setRequirements(getRequirementsFromIDs(requiredRequirements));