Spring MVC: Seleziona tag
-
23-09-2019 - |
Domanda
Ho 2 tavolo:
message(id, name, content, channel_number) // channel_number is foreign key
channel(number, name) // number is primary key
Uso Hibernate per mappare 2 tabella
classe 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;
}
Configurazione ibernata
<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>
In primavera, ho forma per creare/modificare il messaggio. Ho una casella selezionata per scegliere un canale. Quindi, carico tutti i canali in controller e mostrano in vista
<form:form commandName="message" method="post" action="messageForm.htm">
...
<form:select path="channel" items="${channelList}" itemValue="number" itemLabel="name"/>
</form:form>
Quando premo invio, non succede nulla, è ancora nella pagina JSP e non reindirizza al metodo OnSubmit (tutto funziona bene prima di aggiungere questa selezione)
Nessuna soluzione corretta
Altri suggerimenti
Qualsiasi valore che si passa attraverso il modulo dovrebbe essere una stringa o un numero intero. Non è possibile inviare un oggetto canale sul modulo. Un altro motivo è che non puoi ottenere oggetti da richiesta. Nella richiesta servlet.getParameter () restituisce la stringa.
Ciò che si desidera assegnare all'attributo Valore è una sorta di ID che è possibile utilizzare per fare riferimento all'oggetto canale appropriato. Se si tratta di un numero, può essere un INT, intero o una rappresentazione stringa primitivi, purché tu lo mappino a una proprietà dell'oggetto di comando che è di tipo intero o stringa. In altre parole, il canale deve essere intero o stringa. Probabilmente dovresti rinominarlo su Channelid solo per essere chiaro.
Quindi inserisci anche quella variabile INT CanelID nel tuo messaggio Pojo. Nel controller, è possibile creare un oggetto canale utilizzando quell'ID canale selezionato e impostare quell'oggetto canale su oggetto Messaggio creato. Per un esempio, nella classe del controller:
Message message = (Message ) command;
Channel channel= new Channel();
channel.setChannelID(message.getChannelID());
message.setChannel(channel);
Questo ha funzionato per me quando ho avuto lo stesso problema. Questo thread spiega il problema in maggiori dettagli. http://forum.springsource.org/showthread.php?t=33825
Spero questo aiuto.