Qual melhor método para fazer um questionário em JSP?

Olá pessoal, td bem?

Estou quase terminando minha aplicação Web, e estou agora com dúvidas em como devo fazer para criar um questionário.

Eu fiz mais ou menos assim: Criei uma tabela de Perguntas (cod_perguntas, descricao, tipo), uma tabela pra Respostas (cod_respostas, descricao, perguntas_cod_perguntas, complemento) e uma tabela para questionario (cod_questionario, respostas_cod_respostas, orgaogestor_cod_orgaogestor).

Criei as classes conforme as tabelas, tudo certinho. Agora eu estou com dúvidas no questionário. Já relacionei cada resposta a uma pergunta.

Eu Criei uma classe QuestionarioHandler que está assim:

[code]
public class QuestionarioHandler {

private Questionario questionario = new Questionario();

public Questionario getQuestionario() {
	return questionario;
}

// select para orgaogestor
private HtmlSelectOneMenu orgaogestorSelecionado;

public HtmlSelectOneMenu getorgaogestorSelecionado() {
	return orgaogestorSelecionado;
}

public void setorgaogestorSelecionado(
		HtmlSelectOneMenu orgaogestorSelecionado) {
	this.orgaogestorSelecionado = orgaogestorSelecionado;
}

// select para respostas
private HtmlSelectManyCheckbox respostaSelecionado;

public HtmlSelectManyCheckbox getrespostaSelecionado() {
	return respostaSelecionado;
}

public void setrespostaSelecionado(
		HtmlSelectManyCheckbox respostaSelecionado) {
	this.respostaSelecionado = respostaSelecionado;
}

public List<Questionario> getListaQuestionario() {
	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;
}

// select para respostasHandler
private RespostasHandler pegaRespostasHandler() {
	FacesContext facesContext = FacesContext.getCurrentInstance();
	ELContext elContext = facesContext.getELContext();
	ELResolver resolver = facesContext.getApplication().getELResolver();
	Object r = resolver.getValue(elContext, null, "respostasHandler");

	return (RespostasHandler) r;
}

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

	// usaremos o id como valor e o nome como label para os SelectItem.
	RespostasHandler handler = pegaRespostasHandler();
	for (Respostas r : handler.getListaRespostas()) {
		lista.add(new SelectItem(r.getCod_respostas(), r.getDescricao()));
	}
	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_cod_orgaogestor(id_orgaogestor);
	// respostas
	Long id_respostas = Long.valueOf(respostaSelecionado.getValue()
			.toString());
	Respostas r = respostasDao.load(id_respostas);
	questionario.setRespostas_cod_respostas(id_respostas);

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

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

	Session session = HibernateUtil.currentSession();
	Dao<Questionario> questionarioDao = new Dao<Questionario>(session,
			Questionario.class);
	this.questionario = questionarioDao.load(id);
	questionarioDao.delete(this.questionario);
	this.questionario = new Questionario();
	return "excluido";

}

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

	Session session = HibernateUtil.currentSession();
	Dao<Questionario> dao = new Dao<Questionario>(session,
			Questionario.class);
	this.questionario = 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]

Minha JSP do questionario ficou assim;

[code]<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f”%>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<%@ taglib uri=“http://richfaces.org/a4j” prefix=“a4j” %>
<%@ taglib uri=“http://richfaces.org/rich” prefix=“rich” %>

Questionario //aqui eu quero q só me apareçam as respostas para a pergunta de id=1...
	<h:commandButton value="Salvar" action="#{questionarioHandler.salva}" />
</h:form>	
<rich:spacer height="10"/>
<rich:separator height="1" lineType="dotted"/>
<rich:spacer height="10"/>

</f:subview>

[/code]

Alguem pode me dar uma luz?? Não acho muita coisa na net sobre isso.
Agradeço a todos.

Alguém??