Как связать объект внутри коллекции списков командного объекта в Spring MVC - PullRequest
4 голосов
/ 25 ноября 2011

Мой командный объект имеет список объектов. Я хочу привязать текстовое поле к атрибуту объекта внутри этого списка. Можно ли это сделать в 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. Если он работает, я могу сделать это для переменной. Мое требование - я должен позволить пользователю динамически добавлять объекты подвидения. Итак, изначально, когда страница загружается, я просто покажу одно текстовое поле. Я дам ему кнопку, чтобы добавить, если он хочет добавить больше. Я буду динамически генерировать текстовые поля, когда он нажимает кнопку добавления. После этого я должен отправить форму со списком.

Этот код JSP дает мне ошибку. Там написано:

org.springframework.beans.NullValueInNestedPathException

Могу ли я сделать это в коде jsp?

Ответы [ 2 ]

2 голосов
/ 26 ноября 2011

Я нашел ответ на свой вопрос. Но это не решение для моих требований, так как мне нужно реализовать динамический список. но я нашел решение этого вопроса.

Как я понял, в первый раз мы должны отправлять данные из серверной части для привязки входных элементов. Я не нашел способа связать элементы формы, который принимает ввод, не отправляя данные списка с конца бека. Но когда мы отправляем данные и связываем элементы, мы можем получать данные от этих элементов. Итак, я думаю, чтобы связать элемент в такой ситуации, мы должны отправить данные в первый раз. Поправьте меня, если это утверждение неверно. Потому что это было бы более хорошим решением для меня.

Нам нужно использовать ленивый список, а код 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 голос
/ 25 ноября 2011

In 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;
    }
}

с использованием AutopopulationList из пружины. И ваш JSP будет выглядеть так же, вы можете перебирать столько, сколько хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...