Hibernate SpringMVC:选择标记

Hibernate SpringMVC:选择标记,hibernate,spring-mvc,Hibernate,Spring Mvc,我有两张桌子: message(id, name, content, channel_number) // channel_number is foreign key channel(number, name) // number is primary key 我使用hibernate映射表2 java类 public class Message { private Integer id; private String name; private String content;

我有两张桌子:

message(id, name, content, channel_number) // channel_number is foreign key
channel(number, name) // number is primary key
我使用hibernate映射表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;
}
休眠配置

<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>
在spring中,我有创建/编辑消息的表单。我有一个选择框来选择频道。 因此,我加载控制器中的所有通道并在视图中显示

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

</form:form>

当我按下submit时,什么也没有发生,它仍然在jsp页面中&没有重定向到onSubmit方法。在我添加这个select之前,一切都正常。通过表单传递的任何值都应该是字符串或整数。无法在窗体上提交频道对象。另一个原因是您无法从请求中获取对象。在servlet请求中,getParameter返回字符串

要分配给value属性的是某种类型的ID,然后可以使用该ID引用相应的通道对象。如果它是一个数字,它可以是基本的int、Integer或String表示形式——只要将其映射到Integer或String类型的命令对象属性。换句话说,通道需要是整数或字符串。为了清楚起见,您可能应该将其重命名为channelID

然后将int channelID变量也放入消息POJO中。在控制器中,可以使用选定的通道ID创建通道对象,并将该通道对象设置为已创建的消息对象。例如,在控制器类中:

    Message message = (Message ) command;
    Channel channel= new Channel();
    channel.setChannelID(message.getChannelID());
    message.setChannel(channel);
当我遇到同样的问题时,这对我很有效。此线程将更详细地解释此问题


希望有帮助。

通过表单传递的任何值都应该是字符串或整数。无法在窗体上提交频道对象。另一个原因是您无法从请求中获取对象。在servlet请求中,getParameter返回字符串

要分配给value属性的是某种类型的ID,然后可以使用该ID引用相应的通道对象。如果它是一个数字,它可以是基本的int、Integer或String表示形式——只要将其映射到Integer或String类型的命令对象属性。换句话说,通道需要是整数或字符串。为了清楚起见,您可能应该将其重命名为channelID

然后将int channelID变量也放入消息POJO中。在控制器中,可以使用选定的通道ID创建通道对象,并将该通道对象设置为已创建的消息对象。例如,在控制器类中:

    Message message = (Message ) command;
    Channel channel= new Channel();
    channel.setChannelID(message.getChannelID());
    message.setChannel(channel);
当我遇到同样的问题时,这对我很有效。此线程将更详细地解释此问题

希望这有帮助