我有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方法(在我添加此选择之前,一切都很好地工作)

没有正确的解决方案

其他提示

您通过表单的任何值都应是字符串或整数。您不能在表格上提交频道对象。另一个原因是您无法从请求中获得对象。在Servlet request.getParameter()中返回字符串。

您要分配给值属性的是某种ID,然后可以使用它们来引用适当的频道对象。如果是一个数字,则可以是原始的int,整数或字符串表示形式 - 只要将其映射到类型整数或字符串的命令对象属性即可。换句话说,频道需要是整数或字符串。您可能应该将其重命名为ChannelID,以便明确。

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

    Message message = (Message ) command;
    Channel channel= new Channel();
    channel.setChannelID(message.getChannelID());
    message.setChannel(channel);

当我遇到同样的问题时,这对我有用。该线程在更多详细信息中解释了问题。 http://forum.springsource.org/showthread.php?t=33825

希望这有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top