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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top