Problema ao tentar persistir

6 respostas
williamdasflores

Boa noite pessoal!
Estou com um problema aqui que não estou conseguindo resolver.

Eu possuo um relacionamento no banco NxN então criei uma classe bean para esse relacionamento.
Esse relacionamento representa alguns checkbox que tenho na View, no caso eu posso escolher mais de um checkbox

<h:outputLabel value="Motivos:" class="label"/>
	<p:selectManyCheckbox value="#{alunoController.alunoMotivo}"  layout="pageDirection">
		<f:selectItems value="#{motivoController.listMotivos}" var="motivos"
			itemValue="#{motivos.codMotivo}" itemLabel="#{motivos.nomeMotivo}"/>		
	</p:selectManyCheckbox>

Quando eu clico em cadastrar é chamado um método persistir que tenho na controle

public void persistir(){
		try{
			AlunoDAO alunoDAO = new AlunoDAO();
			AlunoMotivoDAO alunoMotivoDAO = new AlunoMotivoDAO();
			this.getAluno().setDataCadastramentoAluno(new Date());
			alunoDAO.salvar(this.getAluno());
			alunoMotivoDAO.salvar(this.getAlunoMotivo(), this.getAluno());

O aluno é persistido sem problemas, depois de persistir o aluno eu faço a persistência dos motivo(relacionamento NxN)

public void salvar(List<AlunoMotivo> alunoMotivo, Aluno aluno) throws Exception {
		Connection conn = null;
		PreparedStatement ps = null;
		String SQL = null;
		try{
			for(int i = 0; i < alunoMotivo.size(); i++){
				SQL = "INSERT INTO TB_ALUNO_MOTIVO(tb_aluno_ca, tb_motivo_cod_motivo) VALUES(?, ?)";
				conn = this.conn;
				ps = conn.prepareStatement(SQL);
				ps.setLong(1, aluno.getCaAluno());
				ps.setInt(2, alunoMotivo.get(i).getCodMotivo());//Quando chega aqui é lançado erro
				ps.executeUpdate();
			}
		}catch(SQLException e){
			throw new Exception("Não foi possível persistir os motivos! " +e);
		}finally{
			ConnectionFactory.closeConnection(conn, ps);
		}
java.lang.ClassCastException: java.lang.String cannot be cast to br.com.tutoria.bean.AlunoMotivo

É lançado o erro acima. Eu debuguei e percebi uma coisa.
Quando faço alunoMotivo.get(i) há valor, porém ele retornar List. Agora quando faço alunoMotivo.get(i).getCodMotivo() parece que não retorna nada.
Não sei porque isso está acontecendo.

6 Respostas

ivansalvadori

Boa noite williamdasflores…
Deixa eu fazer algumas consideracoes:

Uma arquitetura tradicional nos sistemas web hj eh a seguinte:

View -> Controle -> Negocio -> Persistencia
{ HTML+JSF } {EJB ou Spring} {JPA, JDBC, Spring, etc…}

Acredito que teu sistema esta fazendo algo muito proximo a isso, porém no teu titulo “Problema ao tentar persistir JSF 2.0”
JSF está no extremo oposto da persistencia…

Acredito que se vc visualizar o teu sistema nessa perstectiva, as coisas se tornem mais claras.
Porque JSF2 nao realizar persistência nenhuma.

Espero ter ajudado.

williamdasflores

Eu sei ivansalvadori
coloquei esse titulo pois estou usando jsf, não que minha persistencia seja jsf.

R

coloca o código dessa classe AlunoMotivo.

williamdasflores

Aluno Motivo seria minha classe bean que criei para o relacionamento.

public class AlunoMotivo {
	private int codMotivo;
	private int caAluno;
		
	public int getCodMotivo() {
		return codMotivo;
	}
	public void setCodMotivo(int codMotivo) {
		this.codMotivo = codMotivo;
	}
	
	public int getCaAluno() {
		return caAluno;
	}
	public void setCaAluno(int caAluno) {
		this.caAluno = caAluno;
	}

Na minha controller eu criei um List desse objeto e os getter e setter para ele.

List<AlunoMotivo> alunoMotivo;

Então na minha tag selectManyCheckBox eu faço uma chamada a ele.

<p:selectManyCheckbox value="#{alunoController.alunoMotivo}"  layout="pageDirection">
R

Tem um detalhe estranho aqui:

&lt;h:outputLabel value="Motivos:" class="label"/&gt;  
        &lt;p:selectManyCheckbox value="#{alunoController.alunoMotivo}"  layout="pageDirection"&gt;  
            &lt;f:selectItems value="#{motivoController.listMotivos}" var="motivos"  
                itemValue="#{motivos.codMotivo}" itemLabel="#{motivos.nomeMotivo}"/&gt;       
        &lt;/p:selectManyCheckbox&gt;

{alunoController.alunoMotivo} é de que tipo?

williamdasflores

Então, alunoController.alunoMotivo é um List de AlunoMotivo que esta na minha AlunoController.

private List<AlunoMotivo> alunoMotivo;

Também possuo os getters e setter para ele

Criado 16 de setembro de 2012
Ultima resposta 17 de set. de 2012
Respostas 6
Participantes 3