Пружинная форма: radiobuttons: map ‹Object, Enum›: ссылочный ключ в radiobutton-path для установки значения?

У меня есть Map<Course, Role> courses, принадлежащий объекту команды user, и я хочу выбрать роль из roles [enum array] = Role.values для каждого курса в наборе ключей. Я заполняю записи всеми желаемыми курсами и ролью по умолчанию и помещаю это в пользователя в модель. Ниже приведена моя форма, но я не могу понять, как ссылаться на ключ (который является "курсом") для карты.

    <form:form method="POST" commandName="user">
    <table>
        <tr>
            <td>User Name:</td>
            <td><form:input path="name" /></td>
        </tr>
        <c:forEach var="course" items="${courseChoices}">
            <tr>
            <form:radiobuttons path="courses['${course}']" items="${roles}"/>

            </tr>
        </c:forEach>
    </table>
    <input type="submit" value="save changes">
    <form:errors path="*" />
</form:form>

У меня есть редактор свойств, связанный с преобразованием курса в String и обратно, который просто использует идентификатор объекта.

Я получаю InvalidPropertyException:

Недействительное свойство "курсы [com.example.app.Course@7]" класса компонента [com.example.app.User]: недопустимый индекс в пути к свойству "курсы [com.example.app.Course@7] ';

вложенное исключение: org.springframework.beans.TypeMismatchException: не удалось преобразовать значение свойства типа java.lang.String в требуемый тип com.example.app.Course для свойства null;

Вложенное исключение - java.lang.NumberFormatException: для входной строки: "com.example.app.Course@7"

Я не знаю, что имеет значение null, потому что я вижу курс с идентификатором 7 в моей базе данных.

По сути, что оценивает атрибут пути и как он понимает контекст jsp? Это язык выражения Spring? Я искал ресурсы, чтобы выяснить, как выбрать значения для ключей карты из моего набора ролей, но я не нашел многого.


person bytesandwich    schedule 06.01.2012    source источник


Ответы (1)


Я полагаю, у вас есть геттер getId() или что-то подобное в курсах, поэтому вместо path="courses['${course}']" в теге radiobuttons напишите path="courses['${course.id}']" (или course.whateverTheIdIsCalled для получателя идентификатора getWhateverTheIdIsCalled())

person Fortunato    schedule 07.01.2012
comment
Вы устранили проблему для меня, а также я обнаружил, что в моем редакторе настраиваемых свойств используется дао, которое никогда не было автоматически подключено, так как я создал редактор настраиваемых свойств, когда связал его. Мне пришлось сделать редактор настраиваемых свойств внедренным полем на моем контроллере. Дао было нулевым указателем. Спасибо за вашу помощь! - person bytesandwich; 07.01.2012