Spring MVC: выберите тег
-
23-09-2019 - |
Вопрос
У меня есть 2 таблица:
message(id, name, content, channel_number) // channel_number is foreign key
channel(number, name) // number is primary key
Я использую Hibernate для карты 2 таблицы
Java Class
public class Message {
private Integer id;
private String name;
private String content;
private Channel channel;
}
public class Channel {
private Integer number;
private String name;
}
Hibernate Config
<class name="Message" table="message">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" />
<property name="content" column="content" />
<many-to-one name="channel" column="channel_number" not-null="true" />
</class>
<class name="Channel" table="channel">
<id name="number" />
<property name="name" />
</class>
Весной у меня есть форма для создания/редактирования сообщения. У меня есть поле выбора, чтобы выбрать канал. Итак, я загружаю все каналы в Controller & Show
<form:form commandName="message" method="post" action="messageForm.htm">
...
<form:select path="channel" items="${channelList}" itemValue="number" itemLabel="name"/>
</form:form>
Когда я нажимаю на отправку, ничего не произойдет, он все еще находится на странице JSP и не перенаправляет метод OnSubmit (все работает хорошо, прежде чем я добавлю этот выбор)
Нет правильного решения
Другие советы
Любое значение, которое вы проходите через форму, должно быть строкой или целым числом. Вы не можете отправить объект канала в форме. Другая причина в том, что вы не можете получить объект от запроса. В сервировании request.getParameter () возвращает строку.
То, что вы хотите назначить атрибуту значения, - это своего рода идентификатор, который вы можете использовать для ссылки на соответствующий объект канала. Если это число, это может быть примитивное представление int, integer или строки - до тех пор, пока вы отображаете его с свойством объекта команды, которое имеет тип Integer или String. Другими словами, канал должен быть целым или строкой. Вы, вероятно, должны переименовать его в Channelid, чтобы быть ясным.
Затем поместите эту переменную int Channelid в свое сообщение POJO. В контроллере вы можете создать объект канала, используя этот выбранный идентификатор канала и установить этот объект канала для создания объекта сообщения. Например, в классе контроллера:
Message message = (Message ) command;
Channel channel= new Channel();
channel.setChannelID(message.getChannelID());
message.setChannel(channel);
Это сработало для меня, когда у меня была такая же проблема. Эта ветка объясняет проблему более подробно. http://forum.springsource.org/showthread.php?t=33825
Надеюсь, это поможет.