提前感谢您的帮助。
我有一个正在使用 JSR 303 验证的表单。验证失败后,控制器返回表单,显示验证错误,并使用原始值呈现表单。这适用于除多选元素之外的所有类型的表单元素。
命令对象:
public class TaskOrder implements Serializable {
private static final long serialVersionUID = 1L;
...
@XmlTransient
@ManyToMany
@<OtherJPAAnnotations...>
private List<Contractor> subcontractors;
...
}
承包商等级:
public class Contractor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@<OtherJPAAnnotations...>
private Integer id;
@<OtherJPAAnnotations...>
private String name;
}
控制器:
@RequestMapping(value="processingPath", method=RequestMethod.POST)
public String createNewTaskOrder(@Valid @ModelAttribute TaskOrder taskOrder,
BindingResult result,
Model model) {
...
if (!result.hasErrors()) {
//No binding errors, lots of processing...
else {
model.addAllAttributes(result.getModel());
model.addAttribute(taskOrder);
model.addAttribute("subs", myDAOInstance.getSubs());
return this.setupNewTaskOrder(model);
}
}
@RequestMapping("getFormPath")
public String setupNewTaskOrder(Model model) {
if (!model.containsAttribute("taskOrder")) {
TaskOrder taskOrder = new TaskOrder();
taskOrder.setId(0);
model.addAttribute(taskOrder);
}
return "_n/admin/taskOrder/new";
}
表格:
<form:form commandName="taskOrder" action="processPath">
...
<form:select path="subcontractors">
<form:options items="${subs}" itemValue="id" itemLabel="name"/>
</form:select>
...
</form>
当我使用相同的表单打开现有的“TaskOrder”时,会在“分包商”多选中选择这些值。
但是,尝试添加新的“TaskOrder”时,当它从验证返回时,未选择值。我知道选定的值被附加到模型并返回,但只是没有在 select 元素中被选中。
谢谢你的帮助!