【问题标题】:Parse input fields as a Array list to controller via @RequestMapping通过 @RequestMapping 将输入字段作为数组列表解析到控制器
【发布时间】:2017-08-09 07:43:05
【问题描述】:

我想将输入字段中的所有文本字段和单选按钮作为 ArrayList 提交,并将其解析到控制器,但我不知道该怎么做。

非常感谢任何帮助。

到目前为止,这是我尝试过的:

@RequestMapping(value = "/formdata", method = RequestMethod.POST)
public String formdata(HttpServletRequest req, @AuthenticationPrincipal User currentUser, 
                       @ModelAttribute RegDatas regDatas, Model model) {
    // get values as regDatas[0]?
}

这是我的 HTML 表单:

<form method="post" th:action="@{/formdata}" th:object="${regDatas}">
  <div class="col-sm-4">
    <input th:field="*{regDatas[0].gender}" type="radio" value="MALE" name="gender" disabled="disabled" /><span>Mr</span>
    <input th:field="*{regDatas[0].gender}" type="radio" value="FEMALE" name="gender" disabled="disabled"/><span>Frau</span>
    <p>Firstname:</p>
    <input required="required" type="text"  th:field="*{regDatas[0].firstname}" placeholder="Max" disabled="disabled" />
  </div>
  <div class="col-sm-4">
    <input th:field="*{regDatas[1].gender}" type="radio" value="MALE" name="gender" disabled="disabled" /><span>Mr</span>
    <input th:field="*{regDatas[1].gender}" type="radio" value="FEMALE" name="gender" disabled="disabled"/><span>Frau</span>
    <p>Firstname:</p>
    <input required="required" type="text"  th:field="*{regDatas[1].firstname}" placeholder="Max" disabled="disabled" />
    <button type="submit">Speichern</button>
  </div>
</form>

我的包装类:

public class RegDatas {

    private List<RegData> regDatas;

    public List<RegData> getRegDatas() {
        return regDatas;
    }

    public void setRegDatas(List<RegData> regDatas) {
        this.regDatas = regDatas;
    }

}

我的类来存储值:

public class RegData {

    private String email;
    private String firstname;
    private Gender gender;

    public String getEmail() {return email;}

    public void setEmail(String email) {this.email = email;}

    public String getFirstname() {return firstname;}

    public void setFirstname(String firstname) {this.firstname = firstname;}

    public Gender getGender() {return gender;}

    public void setGender(Gender gender) {this.gender = gender;}
}

这是我看到的错误,如果我像这样运行它:

org.springframework.beans.NotReadablePropertyException: Invalid property 'RegDatas[0]' of bean class [de.ciss.aag.model.domain.RegData]: Bean property 'RegDatas[0]' is not readable or has an invalid getter method

【问题讨论】:

  • 从表面上看,这看起来应该可行。你看到什么问题?当您执行 POST 时,regDatas 变量在您的控制器中包含什么?
  • 我收到此错误 org.springframework.beans.NotReadablePropertyException:bean 类 [de.ciss.aag.model.domain.RegData] 的无效属性“RegDatas [0]”:Bean 属性“RegDatas [ 0]' 不可读或具有无效的 getter 方法
  • 什么时候看到错误?是在您提交表单时,还是在您最初加载页面时?你有什么东西可以填充你的模型类吗?当页面加载时,您的RegDatas.regDatas 列表中有任何内容吗?
  • 初次加载页面时提示错误。类中没有任何内容:/

标签: java spring spring-data thymeleaf request-mapping


【解决方案1】:

从您的 cmets 来看,我认为问题在于您的模型没有填充 RegDatas 对象。这个Baeldung tutorial - Getting Started with Forms in Spring MVC,尤其是第 4 节可能是一个很好的资源,如果你还没有看过的话,但我认为你的控制器中需要这样的东西(来自教程):

@RequestMapping(value = "/employee", method = RequestMethod.GET)
public ModelAndView showForm() {
    return new ModelAndView("employeeHome", "employee", new Employee());
}

但是您需要将填充的RegDatas 实例添加到您的模型中,而不是员工,因此作为一个非常基本的示例,这似乎对我有用,您的代码。还有其他填充模型的方法,我建议研究一下,但这可能是最直接的。

@RequestMapping("/your-page-endpoint")
public ModelAndView get() {
    return new ModelAndView("your-view-name", "regDatas", new RegDatas());
}

【讨论】:

  • 感谢您的快速回复!我想我明白了.. 你知道如何从控制器访问存储的数据吗?
猜你喜欢
  • 2018-09-05
  • 2011-05-23
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2017-07-23
相关资源
最近更新 更多