Problemas ao setar indices a uma lista
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á.
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
Curtidas 0
Respostas
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,
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
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
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
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: ############################################
<!-- 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
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;
}
....
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
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
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
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
<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
03/05/2011
Resolvido ? Favor fechar :)
GOSTEI 0
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.
Obrigado.
GOSTEI 0