Olá pessoal, estou tendo um trabalho na implantação de um método HtmlSelectManyListbox, onde os dados quando deveriam ser salvos no banco, me retornam esse erro no console do eclipse:
10/02/2010 12:22:40 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=j_id33:selPerg1[severity=(ERROR 2), summary=(Conversion Error setting value '3 18' for '#{questionarioHandler.resposta.codRespostas}'. ), detail=(Conversion Error setting value '3 18' for '#{questionarioHandler.resposta.codRespostas}'. )]
O erro me indica que está tendo um problema na conversão dos valores selecionados, apesar de no método eu solicitar essa conversão…
Como eu não achei nada sobre a aplicação metodológica no bean referente ao HtmlSelectManyListbox, me ocorre que poderá ser um erro de métodos ou problema no armazenamento do registro no banco. Segue abaixo os métodos utilizados:
[code]public class QuestionarioHandler {
private HtmlSelectManyListbox respostas1Selecionado = new HtmlSelectManyListbox();
//getters e setters…
public List<SelectItem> getRespostasPergunta1() {
Session session = HibernateUtil.currentSession();
RespostasDao dao = new RespostasDao(session, Respostas.class);
List<Respostas> respostas = dao.getRespostasByPergunta1(new Long(1));
List<SelectItem> items = new ArrayList<SelectItem>(respostas.size());
for (Respostas r : respostas) {
items.add(new SelectItem(r.getCodRespostas(), r.getDescricao()));
}
return items;
}
public String salva() {
Session session = HibernateUtil.currentSession();
Dao<Questionario> dao = new Dao<Questionario>(session,
Questionario.class);
Dao<OrgaoGestor> ogDao = new Dao<OrgaoGestor>(session,
OrgaoGestor.class);
Dao<Respostas> respostasDao = new Dao<Respostas>(session,
Respostas.class);
// orgaogestor
Long id_orgaogestor1 = Long.valueOf(orgaogestorSelecionado.getValue()
.toString());
OrgaoGestor og1 = ogDao.load(id_orgaogestor1);
questionario.setOrgaogestor(og1);
// respostas1
Long id_respostas1 = Long.valueOf(respostas1Selecionado.getValue()
.toString()); //AQUI ESTÁ A CONVERSÃO OU SERÁ Q ELA NÃO É A CORRETA?
Respostas r1 = respostasDao.load(id_respostas1);
questionario.setResposta(r1);
dao.merge(this.questionario);
this.questionario = new Questionario();
return "sucesso";
}[/code]
O arquivo xhtml:
<h:outputText value="1) Pergunta 1: " />
<h:selectManyListbox value="#{questionarioHandler.resposta.codRespostas}" binding="#{questionarioHandler.respostas1Selecionado}" id="selPerg1">
<f:selectItem itemValue="" itemLabel="Selecione" id="selper1"/>
<f:selectItems value="#{questionarioHandler.respostasPergunta1}" id="sPerg1"/>
</h:selectManyListbox>
<br/>
Como eu tenho muita dificuldade com relacionamentos entre tabelas e a própria linguagem postgreSQL, o que me levou a estudar o que me apareceu na net sobre o assunto, eu crio as tabelas e relacionamentos através das anotações do hibernate, onde as tabelas questionario, perguntas e respostas se relacionam da seguinte forma:
//tabela questionario
@Entity
@Table(name = "questionario")
public class Questionario {
@Id
@GeneratedValue
@Column(name = "cod_questionario")
private Long cod_questionario;
@ManyToOne
@JoinColumn(name = "cod_orgaogestor")
private OrgaoGestor orgaogestor;
@ManyToOne
@JoinColumn(name = "codRespostas")
private Respostas resposta;
//getters e setters
//tabela perguntas
@Entity
@Table(name = "pergunta")
public class Perguntas {
@Id
@GeneratedValue
@Column(name = "codPerguntas")
private Long codPerguntas;
private String descricao;
private String tipo;
@OneToMany(mappedBy = "pergunta", fetch = FetchType.LAZY)
private List<Respostas> respostas = new ArrayList<Respostas>();
//getters e setters
//tabela respostas
@Entity
@Table(name = "resposta")
public class Respostas {
@Id
@GeneratedValue
@Column(name = "codRespostas")
private Long codRespostas;
private String descricao;
private String resposta_complemento;
private Boolean marcar;
@ManyToOne
@JoinColumn(name = "pergunta")
private Perguntas pergunta;
Pelas leituras que eu fiz, não foi recomendado o relacionamento bidirecional, o que me fez suprimi-lo na tabela de respostas (caso realmente seja necessário, eu coloco de novo).
Agradeço a ajuda dos colegas.