Spring MVC formulário: selecione Tag, várias seleções não vinculativo corretamente?
-
22-08-2019 - |
Pergunta
Eu estou tentando criar um formulário para editar uma linha de banco de dados existente. Eu estou usando o formulário Spring MVC tag para auto ligam o html para formar um objeto de apoio. A linha tem muitos para muitos relação com outra tabela, que eu estou tentando representar com uma caixa de seleção múltipla utilizando o formulário: selecione tag;
<form:select path="rules">
<form:options items="${bundle.rules}" itemValue="name" itemLabel="name"/>
</form:select>
Eu estou usando Hibernate para persistência para que o relacionamento é representar como um HashSet dentro do pojo Bundle.
private Set<Rule> rules = new HashSet<Rule>(0);
Sem a caixa de seleção na página, o objeto irá atualizar o banco de dados corretamente, no entanto com a caixa de seleção o objeto não será atualizado para o banco de dados e eu estou recebendo este erro no meu log log4j, nota que este erro não é causando uma exceção, só é visível nos logs;
DEBUG org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:256) - Data binding errors: 1
Isso acontece independentemente de murchar I desmarcar itens dentro da caixa de seleção, o formulário inteiro se recusa a submeter corretamente. Alguém pode me ajudar?
Estou ciente Como faço para ligar coleção atributos a um formulário no Spring MVC , que é semelhante a esta pergunta, infelizmente, nenhuma das sugestões parecia útil para o meu problema.
Solução
O problema é com a apresentação de seu formulário. Primavera não é capaz de se ligar um objeto do comando, para que ele não enviar o formulário, mas redireciona para a formview vez.
Quando a ligação é realizada com sucesso, você verá esta mensagem em vez disso:
No errors -> processing submit
Para resolver o problema, você precisa registrar um CustomCollectionEditor com seu controlador. (Veja esta ligação ). Seria algo como isto:
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception
{
binder.registerCustomEditor(Set.class, "rules", new CustomCollectionEditor(Set.class)
{
protected Object convertElement(Object element)
{
String name = "";
if (element instanceof String)
name = (String) element;
return name != null ? new Rule(name) : null;
}
});
}