我有以下POJO 类作为输入 -
public class Input implements java.io.Serializable {
private String id;
private List<Inputbenefit> Inputbenefits;
//and getter and setter method
}
Run Code Online (Sandbox Code Playgroud)
现在在控制器中我有 initbinder -
@InitBinder
public void initBinder(Object target,WebDataBinder binder) {
binder.registerCustomEditor(ArrayList.class, new CustomCollectionEditor(ArrayList.class) {
@Override
protected Object convertElement(Object element) {
Input input= new Input ();
if (element != null) {
ArrayList<Inputbenefit> id = (ArrayList<Inputbenefit>) element;
input.setInputbenefits(id);
}
return input;
}
});
Run Code Online (Sandbox Code Playgroud)
控制器中的 Post 方法签名是 -
@RequestMapping(value = "/addDependentOutput.html", method = RequestMethod.POST)
public String OutputForm(@ModelAttribute("Input") Input input, BindingResult result, Model model)
Run Code Online (Sandbox Code Playgroud)
在 JSP 中- 我有 5 个固定的文本框来为 Input 类赋值 -
<spring:bind path="inputbenefits.benefitId">
<form:input path="${status.expression}" size="10" value="Manisha"/>
</spring:bind>
Run Code Online (Sandbox Code Playgroud)
我没有从 html 表单到 OutputForm 获取值,即无法读取inputbenefits.benefitId控制器 post 方法 OutputForm 中的字段值。
简而言之 - 我的 List 对象值没有传递给控制器方法。
请帮忙。谢谢。
你不应该从 converElement 方法返回宿主对象,你应该返回你的集合对象
@Override
protected Object convertElement(Object element) {
int benefitId = Integer.parseInt(element.toString());
return benefitService.getById(benefitId);
}
Run Code Online (Sandbox Code Playgroud)
更新
我假设您试图将收益集合绑定到您的 Input 对象,并且您有一个表单来创建新的 Input 并选择控件来选择所需的收益。对?如果是真的,你需要这样的东西
使用表单弹簧标签
<form:select path="inputBenefits" items="${benefits}"
multiple="multiple" size="5" itemLabel="additionalAmt" itemValue="benefitId"/>
<form:errors path="inputBenefits"/>
Run Code Online (Sandbox Code Playgroud)
其中 ${benefits} 您路径到页面的可用好处集合
在您的控制器中,您需要
@InitBinder
public void initBinder(ServletRequestDataBinder binder) {
binder.registerCustomEditor(List.class, "inputBenefits", new CustomCollectionEditor(List.class) {
protected Object convertElement(Object element) {
if (element != null) {
Integer benefitId = Integer.parseInt(element.toString());
Benefit benefit = benefitService.getById(benefitId); // something that able to get benefit object
return benefit;
}
return null;
}
});
}
Run Code Online (Sandbox Code Playgroud)
这种方法 convertElement 将为页面选择控件上选择的每个值调用。之后,利益的集合将被推送到命令表单对象(我想是输入)
这里的简单例子http://www.tutorialspoint.com/spring/spring_mvc_form_handling_example.htm
| 归档时间: |
|
| 查看次数: |
6012 次 |
| 最近记录: |