Pessoal, 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. O que eu preciso agora é fazer um método que use tipo o checkBox para selecionar as respostas. Minha dúvida está aí.
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 HtmlSelectOneMenu respostaSelecionado;
public HtmlSelectOneMenu getrespostaSelecionado() {
return respostaSelecionado;
}
public void setrespostaSelecionado(HtmlSelectOneMenu 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
<h:outputText value="Quais os Instrumentos de Planejamento? " />
<rich:dataTable value="#{respostasHandler.listaRespostas}" var="f" rendered="#{not empty respostasHandler.listaRespostas}" rows="10" id="respostas"> //o meu problema (até esse momento) está aqui: como eu vou dizer que as respostas que eu quero que apareçam nessa lista são referentes apenas ao ID 1 (Quais os Instrumentos de Planejamento?) por exemplo??
<h:column>
<h:outputText value="#{f.descricao}"/>
</h:column>
<h:column>
<h:selectBooleanCheckbox value="#{f.marcar}">
</h:selectBooleanCheckbox>
</h:column>
</rich:dataTable>
<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.