Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC-Thymeleaf表单与arraylist绑定_Java_Spring_Spring Mvc_Thymeleaf - Fatal编程技术网

Java Spring MVC-Thymeleaf表单与arraylist绑定

Java Spring MVC-Thymeleaf表单与arraylist绑定,java,spring,spring-mvc,thymeleaf,Java,Spring,Spring Mvc,Thymeleaf,在特定视图中,我确实有一个可扩展的员工列表。每个员工有两个字段,分别是工时和预付款。点击一个按钮,我想发布整个表单。为了实现这一点,我将向视图发送一个列表,其中包含几个POJO(基于员工数量) 添加到列表中的POJO如下所示: @Setter @Getter @NoArgsConstructor public class WorkdayCommand { private Long employeeId; private Integer hoursWorked; priv

在特定视图中,我确实有一个可扩展的员工列表。每个员工有两个字段,分别是
工时
预付款
。点击一个按钮,我想发布整个表单。为了实现这一点,我将向视图发送一个列表,其中包含几个POJO(基于员工数量)

添加到列表中的POJO如下所示:

@Setter
@Getter
@NoArgsConstructor
public class WorkdayCommand {

    private Long employeeId;
    private Integer hoursWorked;
    private Integer advancePayment;
}
<form th:object="${workdayForm}" th:action="@{/addworkday}">
  <!-- table headers -->
  <tr th:each="workdayCommand, i : ${workdayForm.workdayCommand}">
      <td><input type="text" class="form-control" placeholder="Enter hours" th:field="*{workdayCommands[__${i.index}__].hoursWorked}"></td>
      <td><input type="text" class="form-control" placeholder="Enter payment" th:field="*{workdayCommands[__${i.index}__].advancePayment}"></td>
      <td><input type="hidden" th:field="*{workdayCommands[__${i.index}__].employeeId}"/></td>
  </tr>
  <!-- table footers -->
</form>
在控制器中,我确实有一行代码将列表添加到模型中:

model.addAttribute("workdayCommands", employeeService.getListOfWorkdayCommandsWithIds());
以及形成实际列表的方法:

public List<WorkdayCommand> getListOfWorkdayCommandsWithIds(){

    List<WorkdayCommand> listOfCommands = new ArrayList<>();
    List<Long> listOfIds = employeeRepository.getListOfIds();

    for(int i = 0; i < employeeRepository.getNumberOfEmployees(); i++){

        WorkdayCommand workdayCommand = new WorkdayCommand();
        workdayCommand.setEmployeeId(listOfIds.get(i));
        listOfCommands.add(workdayCommand);
    }

    return listOfCommands;
}
如何将arraylist与视图正确绑定?我想问题是arraylist中没有
hoursweed
这样的字段。我应该使用哪个
th:field
参数来访问实际的
workday命令。hoursweated
字段,然后遍历列表以遍历所有员工?如果您需要更多信息,请随时询问

我试着做一些事情,比如:

th:field="*{[__${iter.index}__].hoursWorked}"
…但这仍然不起作用。我跟名单上的第一个POJO没什么关系

编辑2

我的完整视图如下所示:

在一个表格行中,我确实有一些员工信息以及2个输入和2个按钮。每一行的创建都得益于:

 <tr th:each="employee : ${employees}">

点击submit按钮时,将创建一个新的Workday对象,然后将其保存到数据库中。发生这种情况时,需要将工作日关联到相应的员工。因此,我的:

 <tr th:each="employee : ${employees}">


…我还分配了一个隐藏的
id
字段。然后我们有
workday命令
,它从视图中收集所有信息。因此,
employeeId
字段是我将工作日与相应员工关联的方式。它应该使用为每个显示所有信息的对象传递的
id
值。希望现在清楚了。

您不能将
数组列表作为
th:object
直接绑定到该列表。相反,您应该创建一个将ArrayList作为属性的对象

@Setter
@Getter
@NoArgsConstructor
public class WorkdayForm {
    private List<WorkdayCommand> workdayCommands = new ArrayList<>();
}
@Setter
@吸气剂
@诺尔格构装师
公务舱工作日表格{
private List workday commands=new ArrayList();
}
然后循环,并像这样绑定它们:

@Setter
@Getter
@NoArgsConstructor
public class WorkdayCommand {

    private Long employeeId;
    private Integer hoursWorked;
    private Integer advancePayment;
}
<form th:object="${workdayForm}" th:action="@{/addworkday}">
  <!-- table headers -->
  <tr th:each="workdayCommand, i : ${workdayForm.workdayCommand}">
      <td><input type="text" class="form-control" placeholder="Enter hours" th:field="*{workdayCommands[__${i.index}__].hoursWorked}"></td>
      <td><input type="text" class="form-control" placeholder="Enter payment" th:field="*{workdayCommands[__${i.index}__].advancePayment}"></td>
      <td><input type="hidden" th:field="*{workdayCommands[__${i.index}__].employeeId}"/></td>
  </tr>
  <!-- table footers -->
</form>


您还应该重复使用
workday命令
,就像在
员工
上一样,我在哪里可以这样做?在
表单中
标签?好的。这是合理的。还有一个问题。首先,在遍历雇员时,隐藏字段
id
将获得分配的值。需要将相同的值传递到支持对象中的
employeeId
字段。这样,我可以肯定,工作时间和报酬都分配给了正确的员工。我不能在单个表行中包含2
th:each
。。。关于如何解决这个问题有什么线索吗?我不知道你的意思。。。
workCommand
上的
employeeId
是什么?为什么需要循环遍历员工?workdayCommand应该将员工作为其属性,然后。。。作为循环的一部分,您可以像这样显示员工信息:
,或者您可以只循环员工而不是Workday命令。在我看来,一切都会保持不变。