Pergunta

Eu tenho 2 tabela:

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

Eu uso o hibernato para mapear 2 tabela

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

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>

Na primavera, tenho formulário para criar/editar mensagem. Eu tenho uma caixa selecionada para escolher um canal. Então, eu carrego todos os canais no controlador e show em vista

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

</form:form>

Quando pressiono o envio, nada acontece, ele ainda está na página JSP e nenhum redirecionamento para o método onSubmit (tudo funciona bem antes de adicionar essa seleção)

Nenhuma solução correta

Outras dicas

Qualquer valor que você passa pelo formulário deve ser uma string ou número inteiro. Você não pode enviar um objeto de canal no formulário. Um outro motivo é que você não pode obter objeto da solicitação. No servlet request.getParameter () Retorna string.

O que você deseja atribuído ao atributo de valor é algum tipo de ID que você pode usar para fazer referência ao objeto de canal apropriado. Se for um número, pode ser uma representação primitiva de INT, Inteiro ou String - desde que você o mapeie para uma propriedade de objeto de comando que seja do tipo inteiro ou string. Em outras palavras, o canal precisa ser inteiro ou string. Você provavelmente deve renomeá -lo para o ChannelID apenas para ficar claro.

Em seguida, coloque essa variável can canal em sua mensagem POJO também. No controlador, você pode criar um objeto de canal usando esse ID de canal selecionado e definir esse objeto de canal como o objeto de mensagem criado. Para um exemplo, na classe controladora:

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

Isso funcionou para mim quando tive o mesmo problema. Este tópico explica o problema em mais detalhes. http://forum.springsource.org/showthread.php?t=33825

Espero que isso ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top