2010-01-27 2 views
2

i have 2 Table:printemps mvc: balise select

message(id, name, content, channel_number) // channel_number is foreign key 
channel(number, name) // number is primary key 

j'utiliser en veille prolongée à la carte 2 Table

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

config mise en veille prolongée

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

dans printemps, j'ai la forme pour créer/modifier le message. J'ai une boîte de sélection pour choisir une chaîne. , je charger tous les canaux contrôleur & montrent en vue

<form:form commandName="message" method="post" action="messageForm.htm"> 
    ... 
    <form:select path="channel" items="${channelList}" itemValue="number" itemLabel="name"/> 

</form:form> 

quand je presse soumettre, rien ne se passe, il est toujours dans la page jsp & pas redirect à la méthode onSubmit (tout fonctionne bien avant d'ajouter cette sélection)

Répondre

0

Toute valeur que vous passez à travers le formulaire doit être une chaîne ou un nombre entier. Vous ne pouvez pas soumettre un objet de canal sur un formulaire. Une autre raison est que vous ne pouvez pas obtenir d'objet de la demande. Dans la servlet request.getParameter() renvoie String. Ce que vous voulez attribuer à l'attribut value est une sorte d'identifiant que vous pouvez ensuite utiliser pour référencer l'objet Channel approprié. S'il s'agit d'un nombre, il peut s'agir d'une représentation primitive int, Integer ou String - à condition de la mapper à une propriété d'objet de commande de type Integer ou String. En d'autres termes, le canal doit être Integer ou String. Vous devriez probablement le renommer en channelID juste pour être clair.

Ajoutez ensuite cette variable int channelID dans votre POJO Message. Dans le contrôleur, vous pouvez créer un objet de canal à l'aide de l'ID de canal sélectionné et définir cet objet de canal sur l'objet de message créé. Pour un exemple, en classe de contrôleur:

Message message = (Message) command; 
    Channel channel= new Channel(); 
    channel.setChannelID(message.getChannelID()); 
    message.setChannel(channel); 

Cela a fonctionné pour moi quand je suis arrivé ce même problème. Ce fil explique le problème en plus de détails. http://forum.springsource.org/showthread.php?t=33825

Espérons cette aide.

Questions connexes