Problemas em salvar dados do SelectManyCheckbox no banco postgresql

5 respostas
Kleber-rr
pessoal é o seguinte: Estou tentando salvar os dados de um SelectManyCheckbox em um banco, mas está me retornando esse erro:
javax.servlet.ServletException: javax.servlet.ServletException: #{questionarioHandler.salva}: java.lang.NumberFormatException: For input string: "[Ljava.lang.String;@9a42ef"
	br.gov.rr.setrabes.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:26)

root cause 
java.lang.NumberFormatException: For input string: "[Ljava.lang.String;@9a42ef"
	java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	java.lang.Long.parseLong(Long.java:438)
	java.lang.Long.valueOf(Long.java:535)
	br.gov.rr.setrabes.handler.QuestionarioHandler.salva(QuestionarioHandler.java:140)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:616)
	org.apache.el.parser.AstValue.invoke(AstValue.java:172)
	org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	javax.faces.component.UICommand.broadcast(UICommand.java:383)
	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186)
	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164)
	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:307)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
	br.gov.rr.setrabes.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:23)
AS minhas classes estão assim: Classe 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 = "cod_respostas")
	private Respostas resposta;
Classe 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;

	@OneToMany(mappedBy = "resposta", fetch = FetchType.LAZY)
	// @Cascade(org.hibernate.annotations.CascadeType.ALL)
	private List<Questionario> questionarios = new ArrayList<Questionario>();
Classe questionarioHandler:
public class QuestionarioHandler {

	private Questionario questionario = new Questionario();
	private Perguntas pergunta = new Perguntas();
	private Respostas resposta = new Respostas();
	private OrgaoGestor orgaogestor = new OrgaoGestor();
	private List<SelectItem> orgaogestores = new ArrayList<SelectItem>();
	private HtmlSelectOneMenu orgaogestorSelecionado = new HtmlSelectOneMenu();
	private HtmlSelectManyCheckbox respostasSelecionado = new HtmlSelectManyCheckbox();

	public List<Questionario> getQuestionarios() {
		System.out.println("Carregando a lista de questionario ...");
		Session session = HibernateUtil.currentSession();
		Dao<Questionario> dao = new Dao<Questionario>(session,
				Questionario.class);
		return dao.list();
	}

	// select para orgaogestorHandler
	private OrgaoGestorHandler pegaOrgaoGestorHandler() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		ELContext elContext = facesContext.getELContext();
		ELResolver resolver = facesContext.getApplication().getELResolver();
		Object og = resolver.getValue(elContext, null, "orgaogestorHandler");

		return (OrgaoGestorHandler) og;
	}

	public List<SelectItem> getOrgaoGestorParaComboBox() {
		List<SelectItem> lista = new ArrayList<SelectItem>();

		// usaremos o id como valor e o nome como label para os SelectItem.
		OrgaoGestorHandler handler = pegaOrgaoGestorHandler();
		for (OrgaoGestor og : handler.getOrgaosGestores()) {
			lista.add(new SelectItem(og.getCod_orgaogestor(), og.getNome()));
		}
		return lista;
	}


	public String salva() {
		System.out
				.println("Adicionando: " + questionario.getCod_questionario());
		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_orgaogestor = Long.valueOf(orgaogestorSelecionado.getValue()
				.toString());
		OrgaoGestor og = ogDao.load(id_orgaogestor);
		questionario.setOrgaogestor(og);
		// respostas
		Long id_respostas = Long.valueOf(respostasSelecionado.getValue()
				.toString());
		Respostas r = respostasDao.load(id_respostas);
		questionario.setResposta(r);

		dao.merge(this.questionario);

		this.questionario = new Questionario();
		return "sucesso";
	}

	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;

	}
RespostasDao:
@SuppressWarnings("unchecked")
	public List<Respostas> getRespostasByPergunta1(Long id) {
		Criteria criteria = session.createCriteria(Respostas.class);
		Perguntas pergunta = new Perguntas();
		pergunta.setCodPerguntas(new Long(1));
		criteria.add(Restrictions.eq("pergunta", pergunta));
		List results = criteria.list();
		return results;
	}
Além dos erros que por ventura venham a ter, provavelmente minha selectManyCheckBox deve estar errada.
<h:outputText value="1) Pergunta 1: " />
		<h:selectManyCheckbox  binding="#{questionarioHandler.respostasSelecionado}" id="selPerg">
				<f:selectItems value="#{questionarioHandler.respostasPergunta1}" id="sPerg"/>
		</h:selectManyCheckbox>
			<br/>

Pessoal, preciso de ajuda urgente!

Agradeço.

5 Respostas

Kleber-rr

Pessoal, passei a utilizar o selectOneMenu para verificar a questão da gravaçao no banco, e está tudo ok…
O que eu tentei fazer tb, é criar 2 objetos selectOneMenu na classe questionarioHandler para ver se ele gravava 2 resposta em um único registro de questionario: Resultado: ele grava apenas 1.

Será q existe uma forma de modificar o relacionamento para gravar várias respostas em um único registro de questionario? ou será q eu vou ter q modificar a tabela e criar vários campos de resposta, tipo resposta1, resposta2, resposta3…???

Agradeço a ajuda!

Kleber-rr

Alguem??

Kleber-rr

Nada??

nilopadilha

bom dia eu estou com o mesmo problema que você e não consigo resolver, você conseguiu resolver o seu?
Que possa me ajudar.

Kleber-rr

resolvi, mas não me lembro agora. vou olhar a aplicação e depois posto uma resposta, ok? fw

Criado 3 de fevereiro de 2010
Ultima resposta 4 de jun. de 2012
Respostas 5
Participantes 2