【发布时间】:2011-11-22 22:51:15
【问题描述】:
在我的 spring mvc 应用程序中,我有用户可以创建的关卡。对于这些级别,需要满足各种要求(需要汽车、电话等)。
创建新关卡时,用户可以看到所有这些需求的列表,并将这些需求移动到所需的需求区域(通过单击它们将它们从一个 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>
RequirementList 只是一个返回需求列表的模型属性
级别和需求的模型如下所示:
public class Level {
private String name;
private int id;
private int points
private List<Requirement> requirements;
....
}
public class Requirement{
private String name;
private String id;
....
}
在控制器中这个添加功能的方法看起来像这样
@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 中插入 <input type='hidden' value='' + id +'' name="requirements"/> 并执行类似的操作
String[] requiredRequirements = ((String) result.getFieldValue("requirements")).split(",");
level.setRequirements(getRequirementsFromIDs(requiredRequirements));
这在我调用 validate 方法之前工作正常,因为在绑定结果中,需求只是一个字符串列表(来自称为需求的隐藏字段),因此它会引发类型不匹配。我想过写一个属性编辑器,但这似乎是一个修复黑客的黑客。
我想知道是否有人对如何解决此问题有任何建议。
提前致谢
【问题讨论】:
-
属性编辑器是怎么做的,为什么你认为这是一个 hack?
-
你试过spring:bind吗? mattfleming.com/node/134
-
@Affe 对于我的情况来说,这似乎是一个黑客攻击
-
需求对象的内容必须来自某个地方。要么告诉 spring 如何将需求 ID 转换为整个需求(PropertyEditor),要么将需求的全部内容放入 POST。
标签: java spring spring-mvc