質問
私は2つのテーブルを持っています:
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;
}
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ページにあり、OnSubmitメソッドにリダイレクトされていません(この選択を追加する前にすべてがうまく機能します)
正しい解決策はありません
他のヒント
フォームを通過する値は、文字列または整数である必要があります。フォームにチャネルオブジェクトを送信することはできません。他の理由は、リクエストからオブジェクトを取得できないことです。サーブレットrequest.getParameter()で文字列を返します。
値属性に割り当てたいのは、適切なチャネルオブジェクトを参照するために使用できるある種のIDです。数字の場合、プリミティブなINT、整数、または文字列の表現になる可能性があります。整数または文字列のコマンドオブジェクトプロパティにマッピングする限り。つまり、チャネルは整数または文字列である必要があります。明確にするために、おそらくChannelidに名前を変更する必要があります。
次に、そのintチャネル変数をメッセージ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
この助けを願っています。