Problemas ao setar indices a uma lista

Java

03/05/2011

Estou trabalhando em uma lista de questões para um questionário, neste questionário tenho opções de "atende", "não atende" e "justificativa" caso responda "não atende" e me deparei com o seguinte problema, ao clicar em "gravar" ele me retorna o seguinte erro:

03/05/2011 17:14:09 com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: /cd_qualificacao.xhtml @70,90 value="#{qualificacaoForm.qualificacao.qualificacaoQuestionarios[0].flgPontuacao}": Target Unreachable, '0' returned null
javax.el.PropertyNotFoundException: /cd_qualificacao.xhtml @70,90 value="#{qualificacaoForm.qualificacao.qualificacaoQuestionarios[0].flgPontuacao}": Target Unreachable, '0' returned null
...
Caused by: javax.el.PropertyNotFoundException: /cd_qualificacao.xhtml @70,90 value="#{qualificacaoForm.qualificacao.qualificacaoQuestionarios[0].flgPontuacao}": Target Unreachable, '0' returned null
    at com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:92)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:188)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:301)


Agradeço desde já.
Barcelos.java

Barcelos.java

Curtidas 0

Respostas

Anthony Accioly

Anthony Accioly

03/05/2011

Barcelos,
Você poderia compartilhar o código com a gente? Pelo menos o markup dessa form, o Controller e as entidades que estão nessa expressão.
Abraços,
GOSTEI 0
Davi Costa

Davi Costa

03/05/2011

Esse cara está nulo value="#{qualificacaoForm.qualificacao.qualificacaoQuestionarios[0].flgPontuacao}"...
seria interessante vc verificar ou no seu bean ou na sua página antes de setar esse valor. Só vendo sua situação para ver qual a melhor estratégia.

Att Davi
GOSTEI 0
Barcelos.java

Barcelos.java

03/05/2011

### a Página: ####################################################
<!-- QUESTAO 01 -->
            <rich:panel id="PanelQuestionario01">
                    <h:outputText value="Condições de veículo de transporte: "    styleClass="cssOutputtext" />
                    <h:selectOneRadio styleClass="cssOutputopcoes"    id="redio01"
                        value="#{qualificacaoForm.qualificacao.qualificacaoQuestionarios[0].flgPontuacao}">
                        <f:selectItem itemLabel="adequado" itemValue="true" />
                        <f:selectItem itemLabel="inadequado" itemValue="false" />
                    </h:selectOneRadio>
                   
                    <h:outputText value="Justificativa: " styleClass="cssOutputopcoes" />
                    <h:inputText value="#{qualificacaoForm.qualificacao.qualificacaoQuestionarios[0].dscJustificativa}" />
            </rich:panel>

### o Bean: ####################################################
não chega a entrar no bean onte estão os métodos.

### a Entidade Qualificacao: #################################################
package ....
imports ....
@SuppressWarnings("serial")
@Entity
@SequenceGenerator(name = "SEQ_QUALIFICACAO", sequenceName = "S_QUALIFICACAO", allocationSize = 1)
@Table(name = "T_QUALIFICACAO")
public class Qualificacao implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_QUALIFICACAO")
    @Column(name = "ISN_QUALIFICACAO")
    private Integer isnQualificacao;

    // bi-directional many-to-one association to AF
    @OneToOne
    @JoinColumn(name = "ISN_RECEBIMENTO", referencedColumnName = "ISN_RECEBIMENTO")
    Recebimento recebimento = new Recebimento();

//    @OneToMany(mappedBy="qualificacao",cascade=CascadeType.PERSIST)
//    private List<QualificacaoQuestionario> qualificacaoQuestionarios;
   
    @OneToMany(mappedBy="qualificacao",cascade=CascadeType.PERSIST)
    private List<QualificacaoQuestionario> qualificacaoQuestionarios = new ArrayList<QualificacaoQuestionario>();

GETTERS E SETTERS....

### a Entidade QualificacaoQuestionario: ############################################
package ....
imports ....
@SuppressWarnings("serial")
    @Entity
    @SequenceGenerator(name = "SEQ_QUALIFICACAO_QUESTIONARIO", sequenceName = "S_QUALIFICACAO_QUESTIONARIO", allocationSize = 1)
    @Table(name = "T_QUALIFICACAO_QUESTIONARIO")
   
    public class QualificacaoQuestionario implements Serializable {

        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_QUALIFICACAO_QUESTIONARIO")
        @Column(name = "ISN_QUALIFICACAO_QUESTIONARIO")
        private Integer isnQualificacaoQuestionario;
       
        @ManyToOne
        @JoinColumn(name = "ISN_QUALIFICACAO", referencedColumnName = "ISN_QUALIFICACAO")
        Qualificacao qualificacao = new Qualificacao();
       
        @ManyToOne
        @JoinColumn(name = "ISN_QUESTIONARIO", referencedColumnName = "ISN_QUESTIONARIO")
        Questionario questionario = new Questionario();
       
        @Column(name = "VLR_PONTUACAO")
        private Double vlrPontuacao;
       
        @Column(name = "DSC_JUSTIFICATIVA")
        private String dscJustificativa;
       
        @Column(name = "FLG_PONTUACAO")
        private Boolean flgPontuacao;

### a Entidade Questionario: ############################################
package...
imports...
@Entity
@SequenceGenerator(name = "SEQ_QUESTIONARIO", sequenceName = "S_QUESTIONARIO", allocationSize = 1)
@Table(name="T_QUESTIONARIO")
public class Questionario implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_QUESTIONARIO")
    @Column(name = "ISN_QUESTIONARIO")
    private Integer isnQuestionario;
   
    @Column(name="DSC_QUESTIONARIO")
    private String dscQuestionario;

    @Column(name="DSC_TIPO_QUESTIONARIO")
    private String dscTipoQuestionario;
   
    @Column(name="VLR_POSITIVO")
    private Double vlrPositivo;

    @Column(name="VLR_NEGATIVO")
    private Double vlrNegativo;

### o Relacionamento: ############################################
GOSTEI 0
Barcelos.java

Barcelos.java

03/05/2011

o Bean dos métodos se precisar:

public class QualificacaoForm implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    //INSTANCIA 2
    private Qualificacao qualificacao = new Qualificacao();
    private QualificacaoQuestionario qualificacaoQuestionario = new QualificacaoQuestionario();
    private QualificacaoFacade qualificacaoFacade = new QualificacaoFacadeImpl();
    private Questionario questionario = new Questionario();
    private QuestionarioFacade questionarioFacade = new QuestionarioFacadeImpl();
    private List<Qualificacao> qualificacoes;
    private final int QTDE_PERGUNTAS = 5;
    Recebimento recebimento = new Recebimento();

   
   
    public String inserir() {
        try {
            List<QualificacaoQuestionario> qq = qualificacao.getQualificacaoQuestionarios();
               
            for (QualificacaoQuestionario qualificacaoQuestionario : qq) {
                if (qualificacaoQuestionario.getFlgPontuacao().booleanValue() == true) {
                   qualificacaoQuestionario.setVlrPontuacao(qualificacaoQuestionario.getQuestionario().getVlrPositivo());
                } else {
                 qualificacaoQuestionario.setVlrPontuacao(qualificacaoQuestionario.getQuestionario().getVlrNegativo());
                   
                    if (qualificacaoQuestionario.getDscJustificativa() == null || qualificacaoQuestionario.getDscJustificativa().equals("")) {
                        MessagesUtil.inserirMensagem("Justificativa da questão  qualificacaoQuestionario.getQuestionario().getIsnQuestionario()+" não pode ser vazia");
                    }
                }
            }
           
            if (!FacesContext.getCurrentInstance().getMessages().hasNext()) {
                qualificacaoFacade.inserir(qualificacao,recebimento);
                finalizaNF();
                MessagesUtil.inserirMensagem("  Processo qualificado e finalizado com sucesso!");
                return "csRecebimento";
                //MessagesUtil.inserirMensagem("Cadastro realizado com sucesso.");
            }
        } catch (RuntimeException e) {
            MessagesUtil.inserirMensagem("Erro ao inserir Qualificação.");
            e.printStackTrace();
        }
        return null;
    }
    ....
GOSTEI 0
Davi Costa

Davi Costa

03/05/2011

Que tal fazermos isso no bean:


public String inserir() {
        try {
            List<QualificacaoQuestionario> qq = qualificacao.getQualificacaoQuestionarios();

          
               
            for (QualificacaoQuestionario qualificacaoQuestionario : qq) {
                if (qualificacaoQuestionario.getFlgPontuacao().booleanValue() == true) {
                   qualificacaoQuestionario.setVlrPontuacao(qualificacaoQuestionario.getQuestionario().getVlrPositivo());
                } else {
                 qualificacaoQuestionario.setVlrPontuacao(qualificacaoQuestionario.getQuestionario().getVlrNegativo());
                   
                    if (qualificacaoQuestionario.getDscJustificativa() == null || qualificacaoQuestionario.getDscJustificativa().equals("")) {
                        MessagesUtil.inserirMensagem("Justificativa da questão  qualificacaoQuestionario.getQuestionario().getIsnQuestionario()+" não pode ser vazia");
                    }
                }
            }

            if(qq.size()==0){
                 qq. add(new QualificacaoQuestionario());
                 //você pode até etar alguns atributos desse objeto adicionado conforme sua regra de negócio
            }
           
            if (!FacesContext.getCurrentInstance().getMessages().hasNext()) {
                qualificacaoFacade.inserir(qualificacao,recebimento);
                finalizaNF();
                MessagesUtil.inserirMensagem("  Processo qualificado e finalizado com sucesso!");
                return "csRecebimento";
                //MessagesUtil.inserirMensagem("Cadastro realizado com sucesso.");
            }
        } catch (RuntimeException e) {
            MessagesUtil.inserirMensagem("Erro ao inserir Qualificação.");
            e.printStackTrace();
        }
        return null;
    }




Espero ter ajudado

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

03/05/2011

Só complementando, como vc faz essa chada no xhtml:

<rich:panel id="PanelQuestionario01">
                    <h:outputText value="Condições de veículo de transporte: "    styleClass="cssOutputtext" />
                    <h:selectOneRadio styleClass="cssOutputopcoes"    id="redio01"
                        value="#{qualificacaoForm.qualificacao.qualificacaoQuestionarios[0].flgPontuacao}">
                        <f:selectItem itemLabel="adequado" itemValue="true" />
                        <f:selectItem itemLabel="inadequado" itemValue="false" />
                    </h:selectOneRadio>
                   
                    <h:outputText value="Justificativa: " styleClass="cssOutputopcoes" />
                    <h:inputText value="#{qualificacaoForm.qualificacao.qualificacaoQuestionarios[0].dscJustificativa}" />
            </rich:panel>


Seria interessante vc dar uma olhada (debugada)  no getter de qualificacao e ver tb se lá a lista está nula ou com size == 0 daí vc adiciona um trecho de código parecido com akele que coloquei no post anterior.
Talvez só isso resolva e nem precise colocar akele código no inserir..
faz esse teste detste post primeiro


Att Davi
GOSTEI 0
Dyego Carmo

Dyego Carmo

03/05/2011

Resolvido ? Favor fechar :)
GOSTEI 0
Barcelos.java

Barcelos.java

03/05/2011

Foi um vacilo, havia um trecho do código comentado... Peço perdão por vocês terem perdido tempo com isso...

Obrigado.
GOSTEI 0
POSTAR