【问题标题】:Binding nested properties in Spring MVC forms在 Spring MVC 表单中绑定嵌套属性
【发布时间】:2018-01-16 07:26:43
【问题描述】:

我在 Spring mvc 4 中绑定嵌套对象属性时遇到问题。 这是场景:

Form.java:

@Entity
@Table (name = "form")
public class Form implements java.io.Serializable{

@SuppressWarnings("unchecked")
private List<Field> fieldsList = LazyList.decorate(new ArrayList<Field>(),  
           FactoryUtils.instantiateFactory(Field.class));

Field.java

@Entity
@Table(name="field")
public class Field implements java.io.Serializable {

private FieldType fieldType;

FieldType.java

@Entity
@Table(name="field_type")
public class FieldType implements java.io.Serializable {

private Integer id;
private String name;
private List<Field> fields;

我正在发送一个包含 Field 对象列表的 Form 对象:

@RequestMapping(method = RequestMethod.GET)
public ModelAndView editForm(HttpServletRequest request){
    ModelAndView model = new ModelAndView("denf_dynamic_form");
    Form f = formBackingObject(request);
    model.addObject("command", f);
    model.addObject("origFormName",f.getFormName());
    return model;
}

在 JSP 中,我尝试像这样绑定 form.fieldsList.fieldType.name 属性:

<c:forEach items="${command.fieldsList}" var="fi" varStatus="i">

<spring:bind path="command.fieldsList[${i.index}].fieldType.name"> 
    <input style="display:none;" id='fTypeName' name='${status.expression}' 
    value="${status.value }"/>
</spring:bind>

如果字段列表很小,则绑定可以正常工作。随着字段数变大(大约 100 个),行为变得异常;与 Form 类直接相关的属性被正确绑定。但是不能绑定 FieldType 类的嵌套属性(如 fieldType.name)。

有人可以帮忙吗?

【问题讨论】:

    标签: java spring spring-mvc data-binding


    【解决方案1】:

    只是一个更新: 原因是为 fieldType 对象生成了相同的 id。

    Basically they are referencing to same object. That is why spring bind is not working.

    有什么方法可以使这些 id 唯一吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      相关资源
      最近更新 更多