【问题标题】:How to map form input to the list in Spring MVC如何将表单输入映射到 Spring MVC 中的列表
【发布时间】:2015-07-23 05:58:17
【问题描述】:

我正在尝试将表单映射到其中包含列表的 modelAttribute。它向我抛出空指针异常。请帮忙。

这是我的模特

public class FamilyDetails {

    private String spousesName;
    private int spousesAge;
    private String fatherName;
    private String motherName;
    private String fatherAge;
    private String motherAge;
    private long emergencyNumber;
    private String weddingDate;
    private List<ChildrenDetails> childrenDetails;

.....

这包含 childrenDetails 模型的列表

我的孩子详细信息模型是

public class ChildrenDetails {

    private String childName;
    private String childGender;
    private String childDob;
    private String childCompanyName;
    private String childPosition;

....

我想在 jsp 中设置从我的 spring 表单标签中获取的值并将其绑定到我的模型。 所以这就是我所做的

<tr>
                        <c:set value="${family.childrenDetails}" var="child"/>
                        <td>childname:<input type="text" value="${child.childName}"/></td>
                        <td>childGender:<input type="text" value="${child.childGender}"> </td>
                        <td>childDob:<input type="text" value="${child.childDob}"> </td>
                        <td>childCompanyName:<input type="text" value="${child.childCompanyName}"> </td>
                        <td>childPosition:<input type="text" value="${child.childPosition}"> </td>
</tr>   

每次我更改某些内容时,都会遇到不同类型的异常。 请告诉我将模型绑定到我从 UI 发送的值的正确方法是什么

【问题讨论】:

  • 你没有绑定任何东西,使用 Spring 表单标签而不是普通的输入标签。目前生成的随机 id/name 与您的属性名称不匹配,因此基本上不会发生任何事情,也不会绑定任何内容。此外,您将整个集合绑定到一个也不起作用的元素。我强烈建议阅读一下弹簧表单标签的工作原理以及 JSTL 的工作原理。

标签: java spring spring-mvc jstl spring-form


【解决方案1】:

在方法级参数中使用@ModelAttribute注解。它将值与您的 FamilyDetails 域模型对象绑定。

    public String methodName(@ModelAttribute(value="familyDetails") FamilyDetails familyDetails, BindingResult result)
    {
      if (!result.hasErrors()){
           /* action */

      } else {
           /* Binding result error */
           return "Failed";
        }
    return "viewPage";
}

【讨论】:

    【解决方案2】:

    在渲染输入 UI 页面之前,您需要将一个空的 FamilyDetails 对象传递给表单,以便 spring 表单标签库可以将所有输入值绑定到 FamilyDetails 对象。

     @RequestMapping(/UIurl)
        public String renderUI(ModelMap model)
        {
        model.addAttribute("FamilyDetails", new FamilyDetails());
        return "InputUIPage";
        }
    

    输入界面页面

    使用Spring表单标签库; modelAttribute 会将所有输入字段绑定到模型

    <form:form modelAttribute="FamilyDetails" action=""/>
    

    访问控制器中的输入值以进行进一步处理

    @RequestMapping(/formActionurl)
        public String renderUI(@ModelAttribute("FamilyDetails") FamilyDetails familyData)
        {
        String spouseName = familyData.getSpousesName();
        //
        }
    

    签出this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多