Spring MVC: выбрать тег - PullRequest
       11

Spring MVC: выбрать тег

2 голосов
/ 27 января 2010

У меня есть 2 таблицы:

message(id, name, content, channel_number) // channel_number is foreign key
channel(number, name) // number is primary key

я использую спящий режим для отображения 2 таблицы

Java-класс

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

<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>

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

<form:form commandName="message" method="post" action="messageForm.htm">
    ...
    <form:select path="channel" items="${channelList}" itemValue="number" itemLabel="name"/>

</form:form>

когда я нажимаю "отправить", ничего не происходит, он все еще находится на странице jsp и не перенаправляет на метод onSubmit (все работает хорошо, прежде чем я добавлю этот выбор)

1 Ответ

0 голосов
/ 30 сентября 2010

Любое значение, которое вы передаете через форму, должно быть строкой или целым числом. Вы не можете отправить объект канала в форме. Другая причина в том, что вы не можете получить объект из запроса. В сервлете request.getParameter () возвращает String.

То, что вы хотите присвоить атрибуту значения, это какой-то идентификатор, который вы затем можете использовать для ссылки на соответствующий объект Channel. Если это число, это может быть примитивное представление типа int, Integer или String - при условии, что вы сопоставляете его со свойством объекта команды типа Integer или String. Другими словами, канал должен быть 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

Надеюсь, эта помощь.

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