Как связать список с помощью @ModelAttribute для контроллера из формы JSP - PullRequest
3 голосов
/ 07 июля 2011

Я пытаюсь получить список выбранных кандидатов для моего контроллера, используя @modelAttribute с их соответствующими идентификатором и рекламой. Я могу правильно представить одного кандидата, но не знаю, как составить список кандидатов через ... Я пытался добавить Список <>, как я показал ниже, но я получаю

ОШИБКА - SEVERE: Servlet.service () для сервлета [dispatcher] в контексте с путем [/ panel-запросы] выдал исключение [Ошибка обработки запроса; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса бина [java.util.List]: указанный класс является интерфейсом] с коренной причиной org.springframework.beans.BeanInstantiationException: Не удалось создать экземпляр класса бина [java.util.List]: указанный класс является интерфейсом

JSP -

<form:form modelAttribute="candidateAddAttribute" 
  action="/panel-requests/requests/${panelRequestForId.id}/empl" method="post">
<c:forEach items="${candidates}" var="candidates">
    <select name="employee" id="employee" disabled="disabled">
        <option value="default" selected="selected">${candidates.candidateName}</option>
    </select>
    <textarea rows="3" cols="40" id="candidateBlurb" name="candidateBlurb" 
      disabled="disabled">${candidates.candidateBlurb}</textarea>

    <textarea rows="2" cols="20" id="candidateCV" name="candidateCV"                                
      disabled="disabled">${candidates.candidateCV}</textarea>
</c:forEach>
<div id="candidateDiv" id="candidateDiv">
    <select name="employee" id="employee">
        <option value="default" selected="selected">Select Employee</option>
        <c:forEach items="${employees}" var="employee">
            <option value="${employee.id}" id="${employee.id}">
                ${employee.employeeName}- ${employee.employeeCV}<
            /option>
        </c:forEach>
    </select>   
    <textarea rows="3" cols="40" id="candidateBlurb"                
      name="candidateBlurb">BLURB</textarea>
    <div id="employeeCv"></div>
    <input type="submit" value="Add Candidate" />
</div>
</form:form>

В приведенной выше форме сначала отображается список сотрудников, а когда пользователь выбирает сотрудника, вводит объявление и нажимает кнопку добавления кандидата, я передаю данные в контроллер.

Контроллер:

@RequestMapping(value = "{id}/empl", method = RequestMethod.POST)
public String getEmployeeDetails(
    @ModelAttribute("candidateAddAttribute") @Valid List<Candidate> candidates,
    BindingResult result, @PathVariable("id") int requestId, Model model) {

        //implementation goes here
}

Как мне реализовать List в этом случае? Заранее спасибо.

ИЗДАННАЯ ЧАСТЬ Я попытался отправить данные 2 кандидатов, Firebug отправляет их правильно, как - параметры КандидатBlurb BLURB сар КандидатBlurb BLURB Данн сотрудник 1 сотрудник 2

так что это может быть проблемой в initBinder, который я использую, binder.registerCustomEditor (Employee.class, new PropertyEditorSupport () { public String getAsText () { return Long.toString (((Employee) getValue ()). getId ()); } * * Тысяча двадцать-один

                public void setAsText(final String text) {
                    Employee employee = Employee.findById(Integer
                            .parseInt(text));
                    setValue(employee);
                }
            });

, который принимает только 1 сотрудника за раз. Это проблема здесь ???

Ответы [ 3 ]

5 голосов
/ 07 июля 2011

Создайте класс POJO, который содержит список в качестве свойства, такого как

public class EmployeeForm {
     private List<Candidate> candidates;
     public List<Candidate> getCandidates() { ... }
     public void setCandidates(List<Candidates>) { ... }
}

, и используйте его в сигнатуре вашего метода @RequestMapping вместо List<Candidate> напрямую.

Сообщение об ошибке выдает Spring, который жалуется, что не знает, как создать экземпляр интерфейса List, чтобы Spring связал с ним параметры запроса в форме.Вы хотите предоставить простой класс формы / команды для привязки данных к параметрам формы, Spring знает, как обрабатывать список оттуда.

0 голосов
/ 27 июня 2012

Я столкнулся с этой же проблемой, половина полей привязана правильно, а половина - нет.Я заметил, что половина, которая не связывается правильно (что дает мне значение NULL в контроллере), была заключена в DIV.

Когда я переместил эти поля за пределы DIV, бинго, они были правильно связаны в контроллере.

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

0 голосов
/ 29 ноября 2011

Вы можете попробовать это:

List<Candidate> candidates = ListUtils.lazyList(new ArrayList<Candidate>(),FactoryUtils.instantiateFactory(Candidate.class));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...