Форма JSTL: выберите в ячейке таблицы внутри c:forEach

Я хочу иметь раскрывающийся список внутри ячейки таблицы для каждой записи / строки в списке

customerList содержит сущность соединения (со свойствами customerGroup и assignedVendor)

vendorList содержит сущность поставщика (с именем и свойством customerID

Вот что у меня есть до сих пор:

<form:form action="${pageContext.request.contextPath}/vendorAdmin/viewClients/${vendorGroupID}" method="post" >

                            <table class="table table-striped table-bordered table-hover " id="sample_1">
                                <thead>
                                <tr class="bg-success">

                                    <th>Admin Name</th>
                                    <th>Email</th>
                                    <th>Username</th>
                                    <th>Phone</th>
                                    <th>Assign To</th>
                                    <th></th>

                                </tr>
                                </thead>
                                <c:forEach items="${customerList}" var="connection" varStatus="cStatus">
                                    <tr>
                                        <td>${customerList[cStatus.index].customerGroup.name}</td>

                                        <td class="text-center">${customerList[cStatus.index].customerGroup.customerList[0].email}</td>
                                        <td class="text-center">${customerList[cStatus.index].customerGroup.customerList[0].username}</td>
                                        <td class="text-center">${customerList[cStatus.index].customerGroup.customerList[0].phone}</td>
                                        <td>

                                            <form:select path="customerList[${cStatus.index}].assignedVendor.customerID">
                                                <form:options items="${vendorList}" itemLabel="name" itemValue="customerID"/>
                                            </form:select>

                                        </td>
                                        <td>
                                            <a href="<spring:url value="/vendorAdmin/sendMessageToCustomer/${vendorGroupID}/${customerList[cStatus.index].customerGroup.userGroupID}" />"
                                            ><span class="glyphicon glyphicon-message "></span></a>

                                        </td>
                                    </tr>
                                </c:forEach>
                            </table>
                        </form:form>

Ошибка:

 ERROR o.s.web.servlet.tags.form.SelectTag - Neither BindingResult nor plain target object for bean name 'command' available as request attribute
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116)
    at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422)
    at org.springframework.web.servlet.tags.form.SelectTag.writeTagContent(SelectTag.java:194)
    at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84)
    at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)

Может ли кто-то указать, где я иду неправильно?

EDIT: я извиняюсь за то, что недостаточно ясно. Проблема не в том, что я не могу получить customerList от контроллера. Все работает хорошо, кроме form:selectэто чувствует, как я делаю ошибку в pathи не может получить доступ к полю. Надеюсь, это сделает его немного яснее

1 ответ

  1. Spring tablib ожидает имя команды или атрибут модели, на который он может привязать значение ввода.

    Допустим, у вас есть такой класс —

    User{
        private String name;
        //Add getters setters
    }
    

    из контроллера, где загружается страница

    @RequestMapping("/form")
    public String getFormPage(Model model){
       model.addAttribute("user",new User());
    }
    

    потом по форме.JSP-страница

    <form:form modelAttribute="user">/*user is set in model attribute in controller*/
        <form:input path="name" placeholder="Input name">
    </form:form>