我的命令对象有一个对象列表。我想将文本字段绑定到该列表中对象的属性。可以在Spring MVC中做到吗?
命令对象类
public class SubDevisonDto {
private String devId;
private List subDevisions;
列表中提到的Subdevision对象类
public class SubDivison implements Serializable{
private String subDivisonName;
private String createdBy;
private String createdDate;
private String developerID;
private List users;
我希望文本框设置subDivisonName字段的值。
我已经编写了这样的Spring MVC标签。
<spring:bind path="subdivisondto.subDevisions[0].subDivisonName">
<span class="formw">
<input name="subDivisonName" type="text" style="width:350px;" />
</span>
</spring:bind>
仅仅为了测试目的,我把它作为0.如果它正在工作,我可以把它变成一个变量。我的要求是,我应该让用户动态添加subdevision对象。因此,最初当页面加载时,我将只显示一个文本框。如果他想添加更多,我会给他一个按钮添加。单击添加按钮时,我将动态生成文本框。之后我必须提交带有列表的表格。
这个jsp代码给了我一个错误。它说:
org.springframework.beans.NullValueInNestedPathException
我有没有在jsp代码中执行此操作?
答案 0 :(得分:2)
我找到了问题的答案。但是,由于我需要实现动态列表,因此它不是我的要求的解决方案。但我找到了解决这个问题的方法。
据我所知,我们第一次必须从后端发送数据来绑定输入元素。我没有找到一种方法来绑定表单元素,它接收输入而不从beck端发送列表数据。但是当我们发送数据并绑定元素时,我们可以从这些元素中获取输入。所以,我认为在这种情况下绑定元素我们需要第一次发送数据。如果这个陈述是错误的,请纠正我。因为,对我来说这将是一个更好的解决方案。
我们需要使用惰性列表,并对jsp代码进行位修改。
您的命令类对象应该如下所述创建。
import org.apache.commons.collections.list.LazyList;
import org.apache.commons.collections.FactoryUtils;
public class SubDevisonDto {
private String devId;
private List subDevisions =
LazyList.decorate(
new ArrayList(),
FactoryUtils.instantiateFactory(SubDivison.class));
JSP代码应如下所示。
<c:forEach items="${subs.subDevisions}" var="obj" varStatus="gridRow">
绑定输入元素文本框
<spring:bind path="subdivisondto.subDevisions[${gridRow.index}].subDivisonName">
<span class="formw"><input name="<c:out value="${status.expression}"/>" type="text" style="width:350px;" />
绑定输入元素复选框。此输入元素生成一个列表。
<spring:bind path="subs.subDevisions[${gridRow.index}].users">
<c:forEach items="${obj.users}" var="dependenttwo" varStatus="dependentRowtwo">
<li>
<input name="<c:out value="${status.expression}"/>" type="checkbox" class="users" value="<c:out value="${dependenttwo}"/>"/>
<c:out value="${dependenttwo}"/>
</li>
</c:forEach>
</spring:bind>
`subs` is a map key name. the value for this key `subs` is a list of my DTO objects which named as `SubDevisonDto `
此代码适用于我。
感谢所给予的支持。
答案 1 :(得分:1)
在dto:
private List<SubDivision> SubDivisions = new AutoPopulatingList<SubDivision>(new SubDivisionFactory());
和工厂将是这样的:
public class SubDivisionFactory implements AutoPopulatingList.ElementFactory<SubDivision> {
public String createElement(int index) {
SubDivision subDivision = new SubDivision();
return subDivision;
}
}
从春天开始使用AutopopulatingList。而你的jsp看起来会一样,你可以根据需要迭代。