我有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>
在春天,我有表单来创建/编辑消息。我有一个选择框来选择一个频道。 所以,我加载控制器和放大器中的所有通道;在视图中显示
<form:form commandName="message" method="post" action="messageForm.htm">
...
<form:select path="channel" items="${channelList}" itemValue="number" itemLabel="name"/>
</form:form>
当我按提交时,没有任何反应,它仍然在jsp页面&amp;没有重定向到onSubmit方法(在添加此选择之前一切正常)
答案 0 :(得分:0)
您在表单中传递的任何值都应该是字符串或整数。您无法在表单上提交频道对象。另一个原因是你不能从请求中获取对象。在servlet中,request.getParameter()返回String。
您想要分配给value属性的是某种ID,您可以使用它来引用相应的Channel对象。如果它是一个数字,它可以是原始int,Integer或String表示 - 只要将它映射到Integer或String类型的命令对象属性。换句话说,通道需要是Integer或String。您应该将其重命名为channelID,以便明确。
然后将int channelID变量也放入Message 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
希望得到这个帮助。