2010-01-27 110 views
2

我有2個表:彈簧MVC:選擇標籤

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

休眠配置

<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方法(一切工作以及我加入這個選擇之前)

回答

0

您通過表單傳遞的任何值應該是一個字符串或整數。您無法在表單上提交頻道對象。另一個原因是你無法從請求中獲得對象。在servlet中,request.getParameter()返回String。

你想分配給value屬性的是某種類型的ID,然後你可以用它來引用合適的Channel對象。如果它是一個數字,它可以是原始的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); 

當我遇到同樣的問題時,這對我有用。這個線程更詳細地解釋了這個問題。 http://forum.springsource.org/showthread.php?t=33825

希望得到這個幫助。