Pregunta

Tengo 2 mesa:

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

Yo uso hibernado para mapear la tabla

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

configuración de hibbernate

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

En primavera, tengo forma para crear/editar mensaje. Tengo un cuadro de selección para elegir un canal. Entonces, cargo todos los canales en el controlador y muestro a la vista

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

</form:form>

Cuando presiono enviar, no sucede nada, todavía está en la página de JSP y no hay redireccionamiento al método OnSubmit (todo funciona bien antes de agregar esta selección)

No hay solución correcta

Otros consejos

Cualquier valor que pase a través del formulario debe ser una cadena o entero. No puede enviar un objeto de canal en el formulario. Otra razón es que no puede obtener objeto de la solicitud. En el servlet request.getParameter () devuelve la cadena.

Lo que desea asignado al atributo de valor es algún tipo de identificación que luego puede usar para hacer referencia al objeto de canal apropiado. Si es un número, puede ser una representación primitiva int, entero o de cadena, siempre que lo asigne a una propiedad de objeto de comando que sea de tipo entero o cadena. En otras palabras, el canal debe ser entero o cadena. Probablemente debería cambiarlo al nombre de Channelid solo para ser claro.

Luego coloque esa variable int ChannelID en su mensaje POJO también. En el controlador, puede crear un objeto de canal usando esa ID de canal seleccionada y establecer ese objeto de canal para el objeto de mensaje creado. Para un ejemplo, en la clase del controlador:

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

Esto funcionó para mí cuando obtuve este mismo problema. Este hilo explica el problema en más detalles. http://forum.springsource.org/showthread.php?t=33825

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top