Tenho um form de cadastro de usuário em jsf e primefaces. É o meu primeiro form com jsf e tá dando problema ao inserir.
cadusuario.jsf
<?xml version="1.0" encoding="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"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Cadastro de Usuários</title>
<style>
.ui-widget,
.ui-widget .ui-widget {
font-size: 12px !important;
}
</style>
</h:head>
<h:body>
<ui:include src="menu.xhtml"/>
<br/>
<h:form>
<p:panel header="Cadastro de Usuários">
<br/>
<p:fieldset legend="Dados do Usuário">
<br/>
<h:panelGrid columns="4" width="900">
<h:column>
<h:outputLabel value="Nome:" />
</h:column>
<h:column>
<p:inputText required="true" id="nome" size="40" value="#{usuariosBean.usuario.nome}"/>
</h:column>
<h:column>
<h:outputLabel value="Login:"/>
</h:column>
<h:column>
<p:inputText required="true" id="login" size="20" value="#{usuariosBean.usuario.login}"/>
</h:column>
<h:column>
<h:outputLabel value="Senha:"/>
</h:column>
<h:column>
<p:password id="password" size="20" value="#{usuariosBean.usuario.senha}"/>
</h:column>
<h:column>
<h:outputLabel value="Status:"/>
</h:column>
<h:column>
<h:selectOneRadio id="status" value="#{usuariosBean.usuario.status}">
<f:selectItem itemLabel="Ativo" itemValue="AT"/>
<f:selectItem itemLabel="Inativo" itemValue="IN" />
</h:selectOneRadio>
</h:column>
<h:column>
<h:outputLabel value="E-mail:"/>
</h:column>
<h:column>
<p:inputText required="true" id="email" size="40" value="#{usuariosBean.usuario.email}"/>
</h:column>
<h:column>
<h:outputLabel value="Telefone:"/>
</h:column>
<h:column>
<p:inputText required="true" id="fone" size="20" value="#{usuariosBean.usuario.telefone}"/>
</h:column>
<h:column>
<h:outputLabel value="CPF:"/>
</h:column>
<h:column>
<p:inputText required="true" id="cpfcnpj" size="20" value="#{usuariosBean.usuario.cnpjCpf}"/>
</h:column>
<h:column>
<h:outputLabel value="RG:"/>
</h:column>
<h:column>
<p:inputText required="true" id="rg" size="20" value="#{usuariosBean.usuario.rg}"/>
</h:column>
</h:panelGrid>
</p:fieldset>
<br/>
<p:fieldset legend="Endereço">
<br/>
<h:panelGrid columns="4" width="900">
<h:column>
<h:outputLabel value="Rua:" />
</h:column>
<h:column>
<p:inputText required="true" id="rua" size="40" value="#{usuariosBean.usuario.rua}"/>
</h:column>
<h:column>
<h:outputLabel value="Complemento:" />
</h:column>
<h:column>
<p:inputText required="false" id="complemento" size="40" value="#{usuariosBean.usuario.complemento}"/>
</h:column>
<h:column>
<h:outputLabel value="Número:" />
</h:column>
<h:column>
<p:inputText required="false" id="numero" size="20" value="#{usuariosBean.usuario.numero}"/>
</h:column>
<h:column>
<h:outputLabel value="Bairro:" />
</h:column>
<h:column>
<p:inputText required="true" id="bairro" size="40" value="#{usuariosBean.usuario.bairro}"/>
</h:column>
<h:column>
<h:outputLabel value="CEP:" />
</h:column>
<h:column>
<p:inputText required="false" id="cep" size="20"/>
</h:column>
<h:column>
<h:outputLabel value="Observação:" />
</h:column>
<h:column>
<p:inputTextarea id="observacao" rows="5" cols="40" value="#{usuariosBean.usuario.obs}"/>
</h:column>
<h:column>
<h:outputLabel value="Município:" />
</h:column>
<h:column>
<h:selectOneMenu id="municipio" required="true" value="#{usuariosBean.usuario.municipio.id}">
<f:selectItem itemLabel="--Selecione--" itemValue="" />
<f:selectItem itemLabel="Anapolis" itemValue="1"/>
<f:selectItem itemLabel="Goiania" itemValue="2"/>
<f:selectItem itemLabel="Brasilia" itemValue="3"/>
</h:selectOneMenu>
</h:column>
<h:column>
</h:column>
<h:column>
</h:column>
<h:column>
</h:column>
<h:column>
</h:column>
</h:panelGrid>
<p:separator />
<p:commandButton value="Confirma" action="#{usuarioBean.inserir}"/>
</p:fieldset>
</p:panel>
</h:form>
</h:body>
</html>
UsuarioBean:
package classe.controle.Beans;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import classe.modelo.dao.UsuarioDao;
import classe.modelo.vo.Municipio;
import classe.modelo.vo.Usuario;
@ManagedBean(name="usuarioBean")
@RequestScoped
public class UsuariosBean {
private Usuario usuario = new Usuario();
private ArrayList<Usuario> lista;
//inserir no bd os dados do formulario cadusuario
public void inserir() throws SQLException{
usuario.setMunicipio(new Municipio());
UsuarioDao usrDao = null;
Boolean inserir = usrDao.inserir(usuario);
if(inserir != false){
System.out.println("Usuário gravado com sucesso!");
}else{
System.out.println("Erro ao inserir Usuário. Tente novamente!");
}
}
public ArrayList<Usuario> getLista(){
lista = UsuarioDao.listar();
return lista;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public Usuario getUsuario() {
return usuario;
}
}
UsuarioDao:
public boolean inserir(Usuario usuario) throws SQLException{
try {
conexao = Conexao.conectar();
conexao.setAutoCommit(false);
Integer novocadId = null;
StringBuffer sql1 = new StringBuffer();
StringBuffer sql2 = new StringBuffer();
sql1.append("INSERT INTO cadastro (cad_cnpjcpf, cad_razaosocial, cad_nome,"
+ "cad_inscr_estadual, cad_rg, cad_inscr_mun, cad_rua, cad_complemento,"
+ "cad_numero, cad_bairro, cad_munid, cad_cep, cad_telefone, cad_www,"
+ "cad_email, cad_obs) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
PreparedStatement consulta1 = conexao.prepareStatement(sql1.toString());
consulta1.setString(1, usuario.getCnpjCpf());
consulta1.setString(2, usuario.getRazaoSocial());
consulta1.setString(3, usuario.getNome());
consulta1.setString(4, usuario.getInscrEstadual());
consulta1.setString(5, usuario.getRg());
consulta1.setString(6, usuario.getInscrMun());
consulta1.setString(7, usuario.getRua());
consulta1.setString(8, usuario.getComplemento());
consulta1.setString(9, usuario.getNumero());
consulta1.setString(10, usuario.getBairro());
consulta1.setInt(11, usuario.getMunicipio().getId());
consulta1.setString(12, usuario.getCep());
consulta1.setString(13, usuario.getTelefone());
consulta1.setString(14, usuario.getWww());
consulta1.setString(15, usuario.getEmail());
consulta1.setString(16, usuario.getObs());
consulta1.execute();
Statement stmt1 = conexao.createStatement();
ResultSet rs1 = stmt1.executeQuery("SELECT MAX(cad_id) AS cadId from cadastro");
if(rs1.next()){
novocadId = rs1.getInt("cadId");
}
stmt1.close();
sql2.append("INSERT INTO usuario(usu_id, usu_login, usu_senha, usu_sts) VALUES (?,?,?,?)");
PreparedStatement consulta2 = conexao.prepareStatement(sql2.toString());
consulta2.setInt(1, novocadId);
consulta2.setString(2, usuario.getLogin());
consulta2.setString(3, usuario.getSenha());
consulta2.setString(4, usuario.getStatus());
consulta2.execute();
conexao.commit();
System.out.println("Transaction commit...");
conexao.setAutoCommit(true);
return true;
} catch (Exception e) {
if(conexao!=null){
conexao.rollback();
System.out.println("Connection rollback...");
}
e.printStackTrace();
return false;
}
}
Quando dou o submit no formulário dá a seguinte mensagem:
javax.el.PropertyNotFoundException: /cadusuario.xhtml @125,100 value="#{usuariosBean.usuario.municipio.id}": Target Unreachable, ‘municipio’ returned null
Classe Municipio:
package classe.modelo.vo;
public class Municipio {
private int id;
private String descricao;
private String codigo;
private UF uf; // id da uf
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public UF getUf() {
return uf;
}
public void setUf(UF uf) {
this.uf = uf;
}
}
Acho que meu método inserir tá errado ou então é o selectOneMenu do form que está errado.