Binding de Arraylist com checkbox Spring taglib form

5 respostas
ERVER

Boa tarde pessoas,

Estou tentando realizar o binding de algumas checkboxes em um formulário html (usando a taglib do spring framework disponível em <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> ) para uma lista presente em um objeto.

Classe Framework:

package models;

public class Framework {

	private Long id;
	private String nome;
	
	public Framework(Long id, String nome) {
		this.id = id;
		this.nome = nome;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	
	
}

Classe Usuario (contendo um Arraylist de frameworks que o usuário usa):

package br.gov.sp.mococa.models;

import java.util.List;

public class Usuario {
	
	private String nome;
	private String login;
	private String senha;
	private boolean ativo;
	private List<Framework> frameworksFavoritos;
	private String sexo;
	private String pais;
	private String habilidadesJava;
	
	public Usuario() {

	}

	public Usuario(String nome, String login, String senha, boolean ativo,
			List<Framework>  frameworksFavoritos, String sexo, String pais,
			String habilidadesJava) {
		super();
		this.nome = nome;
		this.login = login;
		this.senha = senha;
		this.ativo = ativo;
		this.frameworksFavoritos = frameworksFavoritos;
		this.sexo = sexo;
		this.pais = pais;
		this.habilidadesJava = habilidadesJava;
	}

	public String getNome() {
		return nome;
	}
	
	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public List<Framework>  getFrameworksFavoritos() {
		return frameworksFavoritos;
	}

	public void setFrameworksFavoritos(List<Framework>  frameworksFavoritos) {
		this.frameworksFavoritos = frameworksFavoritos;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getPais() {
		return pais;
	}

	public void setPais(String pais) {
		this.pais = pais;
	}

	public String getHabilidadesJava() {
		return habilidadesJava;
	}

	public void setHabilidadesJava(String habilidadesJava) {
		this.habilidadesJava = habilidadesJava;
	}

}

JSP:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form:form action="novo-usuario" method="post" modelAttribute="usuario">

<table width="580" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="175">&nbsp;</td>
    <td width="393">&nbsp;</td>
    <td width="12">&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Nome:</strong></td>
    <td><form:input path="nome" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Login:</strong></td>
    <td><form:input path="login" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Senha:</strong></td>
    <td><form:password path="senha" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Ativo?</strong></td>
    <td><form:checkbox path="ativo" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Frameworks Favoritos:</strong></td>
    <td>
    <c:forEach items="${usuario.frameworksFavoritos}" var="framework" varStatus="i">
    	<form:checkbox path="frameworksFavoritos" value="${framework.id}" /> ${framework.nome}
    </c:forEach>	
    </td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Sexo:</strong></td>
    <td><form:radiobutton path="sexo" value="M" />
    	<form:radiobutton path="sexo" value="F" />
    </td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>País:</strong></td>
    <td><form:select path="pais">
    		<form:option value="" label="---SELECIONE---" />
        	<form:options items="${listaPaises}" />
        </form:select>
    </td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Habilidades Java:</strong></td>
    <td><form:select path="habilidadesJava" items="${listaHabilidadesJava}" multiple="true" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center">&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center">&nbsp;</td>
    <td align="right"><input type="submit" name="salvar" id="salvar" value="SALVAR" /></td>
    <td>&nbsp;</td>
  </tr>
</table>


</form:form>
</body>
</html>

Controller (método GET da página):

@RequestMapping(value = "novo-usuario", method = RequestMethod.GET) 
	public String carregarPaginaNovoUsuario(HttpServletRequest request, Model model,  @ModelAttribute("usuario") Usuario usuario ) {
		
		Framework fw1 = new Framework(1L, "SPRING");
		Framework fw2 = new Framework(2L, "STRUTS 2");
		Framework fw3 = new Framework(3L, "JSF");
		
		List<Framework> listaFrameworksFavoritos = new ArrayList<>();
		listaFrameworksFavoritos.add(fw1);
		listaFrameworksFavoritos.add(fw2);
		listaFrameworksFavoritos.add(fw3);
		
		usuario.setFrameworksFavoritos(listaFrameworksFavoritos);
		
		String[] listaHabilidadesJava = {"NENHUMA", "HIBERNATE"};
		List<String> listaPaises = new ArrayList<>();
		
		listaPaises.add("ARGENTINA");
		listaPaises.add("BRASIL");
		
		model.addAttribute("listaHabilidadesJava", listaHabilidadesJava);
		model.addAttribute("listaPaises", listaPaises);
		model.addAttribute("usuario", usuario);
		
		return "novo-usuario";
	}

Controller (método POST da página):

@RequestMapping(value = "novo-usuario", method = RequestMethod.POST)
	public String salvarUsuario(Usuario usuario, BindingResult result, HttpServletRequest request, Model model) {
		
			for (int i = 0; i < usuario.getFrameworksFavoritos().size(); i++) {
				System.out.println("FRAMEWORKS FAVORITOS: " + usuario.getFrameworksFavoritos().get(i));
			}
			return "sucesso";
	}

Porém, dá NullPointerException na linha 4 do último código - onde pego os frameworks do usuario, ou seja, a lista tá vazia.

Alguém pode dar uma luz, estou há 3 dias nisso.

Grato desde já, abraços.

5 Respostas

ERVER

Ninguem?

ERVER

No one?

ERVER

Up.

ERVER

Ninguem?

ERVER

Up!

Criado 14 de junho de 2013
Ultima resposta 19 de jun. de 2013
Respostas 5
Participantes 1