Como fazer um questionário em JSP onde o usuário marca as respostas relativas a determinada

Olá pessoal do GUJ, mais uma vez eu venho procurar a ajuda de vcs num assunto que talvez seja até banal para a maioria dos colegas, mas está me deixando de cabelos brancos pela minha falta de experiência em programação, mas tudo bem. O assunto é: Como fazer um questionário em JSP, onde o usuário marca as respostas relativas a determinada pergunta.

Antes de prosseguir, deixa eu explicar a situação:

  • Num sistema de cadastro de usuarios, cada usuario deverá preencher um questionário para ser salvo ao mesmo tempo do seu cadastro;
  • As tabelas do banco em Postgresql estão separadas: uma tabela para usuario, uma para perguntas e outra para respostas;
  • As respostas são cadastradas vinculadas às perguntas, até para facilitar o trabalho e saber de qual pergunta é a resposta x…;
    Agora o problema:
    Eu quais as formas mais práticas que eu tenho de colocar isso pra funcionar???
    Eu quero que, na minha JSP, ao invés de ter que ficar digitando pergunta por pergunta, resposta por resposta (que são várias), me apareçam uma lista de perguntas com suas respectivas respostas. Tudo Bonitinho!!! hauhauhahua

Se alguém tiver uma idéia, agradeço.

Valeu Pessoal!!!

cria tuas classes…

cria o relacionamento das tuas classes…

salva as perguntas no banco…

salva as respostas no banco…

busca as perguntas no banco…

busca as respostas no banco…

joga para tua jsp… e relaciona elas pelas colunas que uma tem na hora e mostra na tela!

:thumbup:

[quote=JonathanSSantos]cria tuas classes…

cria o relacionamento das tuas classes…

salva as perguntas no banco…

salva as respostas no banco…

busca as perguntas no banco…

busca as respostas no banco…

joga para tua jsp… e relaciona elas pelas colunas que uma tem na hora e mostra na tela!

:thumbup: [/quote]

JonathanSSantos, a lógica é essa mesma, só que eu não preciso buscar as perguntas no banco, já que cada resposta está relacionada com determinada pergunta. A questão é mais prática do que teórica. Seria como eu fazer as criterias no DaoEspecífico para respostas e no Bean, e como eu posso chamar essa lista no JSP.

Para facilitar, vou colocar meu o dao e o bean da classe resposta:

====RespostasDao======

[code]public class RespostasDao extends Dao {

private Logger logger = Logger.getLogger(RespostasDao.class);

public RespostasDao(Session session, Class<?> classe) {
	super(session, Respostas.class);
}

public Respostas pesquisaRespostasById(Long cod_respostas) {
	logger.info("pesquisaRespostasById : " + cod_respostas);
	return (Respostas) session.load(Respostas.class, cod_respostas);
}

public Respostas pesquisaRespostasByDescricao(String descricao) {
	logger.info("pesquisaRespostasByDescricao : " + descricao);
	Criteria c = session.createCriteria(Respostas.class);
	c.add(Restrictions.ilike("descricao", descricao + "%"));
	c.addOrder(Order.asc("descricao"));

	return (Respostas) c.uniqueResult();
}

public Respostas pesquisaRespostasByPerguntas(Long perguntas_cod_perguntas) {
	logger
			.info("pesquisaRespostasByPerguntas : "
					+ perguntas_cod_perguntas);
	Criteria c = session.createCriteria(Respostas.class);
	c.add(Restrictions.ilike("perguntas_cod_perguntas",
			perguntas_cod_perguntas + "%"));
	c.addOrder(Order.asc("perguntas_cod_perguntas"));

	return (Respostas) c.uniqueResult();
}

public List<String> findByNameSuggest(String busca) {
	logger.info("findByNameSuggest : " + busca);
	Criteria c = session.createCriteria(Respostas.class);
	c.add(Restrictions.ilike("descricao", busca + "%"));
	c.addOrder(Order.asc("descricao"));
	c.setProjection(Projections.property("descricao"));

	return c.list();
}

@SuppressWarnings("unchecked")
public List<Respostas> pesquisaRespostas(String descricao,
		Long perguntas_cod_perguntas,
		Long unidadeexecutora_cod_unidadeexecutora,
		Long orgaogestor_cod_orgaogestor) {
	Criteria c = session.createCriteria(Respostas.class);
	c.add(Restrictions.ilike("descricao", "%" + descricao + "%"));
	c.add(Restrictions.ilike("perguntas_cod_perguntas", "%"
			+ perguntas_cod_perguntas + "%"));
	c.add(Restrictions.ilike("unidadeexecutora_cod_unidadeexecutora", "%"
			+ unidadeexecutora_cod_unidadeexecutora + "%"));
	c.add(Restrictions.ilike("orgaogestor_cod_orgaogestor", "%"
			+ orgaogestor_cod_orgaogestor + "%"));

	return c.list();
}

}[/code]

======RespostasHandler==========

[code]public class RespostasHandler {

private Respostas respostas = new Respostas();
private Long id;

public Respostas getRespostas() {
	return respostas;
}

// select para Perguntas
private HtmlSelectOneMenu perguntaSelecionado;

public HtmlSelectOneMenu getperguntaSelecionado() {
	return perguntaSelecionado;
}

public void setperguntaSelecionado(HtmlSelectOneMenu perguntaSelecionado) {
	this.perguntaSelecionado = perguntaSelecionado;
}

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

// select para perguntaHandler
private PerguntasHandler pegaPerguntasHandler() {
	FacesContext facesContext = FacesContext.getCurrentInstance();
	ELContext elContext = facesContext.getELContext();
	ELResolver resolver = facesContext.getApplication().getELResolver();
	Object p = resolver.getValue(elContext, null, "perguntasHandler");

	return (PerguntasHandler) p;
}

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

	// usaremos o id como valor e o nome como label para os SelectItem.
	PerguntasHandler handler = pegaPerguntasHandler();
	for (Perguntas p : handler.getListaPerguntas()) {
		lista.add(new SelectItem(p.getCod_perguntas(), p.getDescricao()));
	}
	return lista;
}

public String salva() {
	System.out.println("Adicionando: " + respostas.getDescricao());
	Session session = HibernateUtil.currentSession();
	Dao<Respostas> dao = new Dao<Respostas>(session, Respostas.class);
	Dao<Perguntas> perguntasDao = new Dao<Perguntas>(session,
			Perguntas.class);

	// perguntas
	Long id_perguntas = Long.valueOf(perguntaSelecionado.getValue()
			.toString());
	Perguntas p = perguntasDao.load(id_perguntas);
	respostas.setPerguntas_cod_perguntas(id_perguntas);

	dao.merge(this.respostas);
	dao.delete(this.respostas);
	this.respostas = new Respostas();
	return "sucesso";
}

public String load() {
	Session session = HibernateUtil.currentSession();
	Dao<Respostas> respostasDao = new Dao<Respostas>(session,
			Respostas.class);
	this.respostas = respostasDao.load(this.id);
	return "pesquisaSucesso";
}

public List<Respostas> getRespostasLista() {
	Session session = HibernateUtil.currentSession();
	RespostasDao respostasDao = new RespostasDao(session, Respostas.class);
	return respostasDao.list();
}

public List<Respostas> getRespostasByPerguntas() {
	Session session = HibernateUtil.currentSession();
	RespostasDao respostasDao = new RespostasDao(session, Respostas.class);
	List<Respostas> lista = respostasDao.pesquisaRespostas(this.respostas
			.getDescricao(), this.respostas.getPerguntas_cod_perguntas(),
			this.respostas.getUnidadeexecutora_cod_unidadeexecutora(),
			this.respostas.getOrgaogestor_cod_orgaogestor());
	return lista;
}

public String excluir(ActionEvent event) {
	System.out.println("Excluindo: " + respostas.getCod_respostas());
	UIComponent link = event.getComponent();
	UIParameter param = (UIParameter) link.findComponent("excluir");
	Long id = (Long) param.getValue();

	Session session = HibernateUtil.currentSession();
	Dao<Respostas> respostasDao = new Dao<Respostas>(session,
			Respostas.class);
	this.respostas = respostasDao.load(id);
	respostasDao.delete(this.respostas);
	this.respostas = new Respostas();
	return "excluido";

}

public void escolheRespostas(ActionEvent event) {
	UIComponent link = event.getComponent();
	UIParameter param = (UIParameter) link.findComponent("editCod");
	Long id = (Long) param.getValue();

	Session session = HibernateUtil.currentSession();
	Dao<Respostas> dao = new Dao<Respostas>(session, Respostas.class);
	this.respostas = dao.load(id);
}

public void validaCase(FacesContext fc, UIComponent component, Object value) {
	String valor = value.toString();
	if (!valor.matches("[A-Z].*")) {
		throw new ValidatorException(new FacesMessage(
				"Inicie o nome com letra maiúscula!"));
	}
}

}[/code]

Se alguem puder me dizer se os métodos e criterias acima estão corretos, e como eu devo proceder para que me apareça a lista de perguntas com suas respectivas respostas no JSP, agradeço.

Valeu a ajuda!! :stuck_out_tongue:

Eae pessoal, ninguem ajuda??