Prezados,
Preciso implementar um formulário dinâmico. Vou tentar explicar bem detalhadamente…
Tenho uma tabela com uma lista de temas:
<p:dataTable id="tabela_temas" var="tema" ...
O usuário pode selecionar um tema desta tabela. Após selecionar um tema, devo ir no banco de dados e recuperar todas as perguntas associadas a este tema:
public List<Pergunta> getPerguntas() {
if (this.temaSelecionado != null) {
PerguntaRN perguntaRN = new PerguntaRN();
this.perguntas = perguntaRN.buscarPorTema(temaSelecionado.getId());
...
Agora que começa a parte boa :twisted:. Para cada pergunta, deverá ser fornecida uma resposta. O tipo de pergunta (texto simples, multipla escolha, etc…) define o tipo de campo da resposta. Ou seja, para determinadas perguntas terei um campo de resposta do tipo inputText, para outras terei um campo do tipo selectOneRadio, e por aí vai…
Como teste tentei fazer o seguinte. Na entidade pergunta, criei um atributo transient do tipo String que deverá conter o htmldo campo de resposta. Então alterei o método getPerguntas ficando assim:
public List<Pergunta> getPerguntas() {
if (this.subtemaSelecionado != null) {
PerguntaRN perguntaRN = new PerguntaRN();
this.perguntas = perguntaRN.buscarPorSubtema(subtemaSelecionado.getId());
// Verifica o tipo de pergunta, para definir qual será o tipo de compo de resposta
for (Pergunta pergunta : this.perguntas) {
//if (pergunta.getTipoPergunta().equals("")) {
pergunta.setHtmlCampoResposta("<h:outputText />");
//}
}
}
return perguntas;
}
E no XHTML fiz:
<h:panelGrid columns="2" cellpadding="2">
<ui:repeat var="pergunta" value="#{temaBean.perguntas}">
<h:outputText value="#{pergunta.descricaoPergunta}" style="font-weight: bold;" />
<br />
#{pergunta.htmlCampoResposta}
<br /><br />
</ui:repeat>
</h:panelGrid>
Só que infelizmente não funcionou. É impresso o valor da String… e o campo não é renderizado…
Poderiam me ajudar?
Fala cara, blz?
Já fiz algo parecido, na época era algo mais ou menos assim:
As questoes no banco possuíam:
- A pergunta (duh)
- Um campo que determinava seu tipo (não lembro como eram os valores, vou inventar aqui) como “T” (texto), “R” (radio) e “D” (data)
- A resposta (duh²)
Então eu fazia o formulario como algo do tipo:
<h:panelGrid columns="2" cellpadding="2">
<ui:repeat var="questao" value="#{bean.questoes}">
<h:outputText value="#{questao.pergunta}" />
<br />
<h:inputText value="#{pergunta.resposta}" rendered="questao.texto" /> <!-- Questao possui um metodo isTexto() que verifica se o tipo eh igual a "T" -->
<x:umComponenteDate value="#{pergunta.resposta}" rendered="questao.data" /> <!-- Questao possui um metodo isData() que verifica se o tipo eh igual a "D" -->
<h:selectOneRadio="#{pergunta.resposta}" rendered="questao.radio" /> <!-- Questao possui um metodo isRadio() que verifica se o tipo eh igual a "R" -->
<br /><br />
</ui:repeat>
</h:panelGrid>
[quote=Rendrys]Fala cara, blz?
Já fiz algo parecido, na época era algo mais ou menos assim:
As questoes no banco possuíam:
- A pergunta (duh)
- Um campo que determinava seu tipo (não lembro como eram os valores, vou inventar aqui) como “T” (texto), “R” (radio) e “D” (data)
- A resposta (duh²)
Então eu fazia o formulario como algo do tipo:
<h:panelGrid columns="2" cellpadding="2">
<ui:repeat var="questao" value="#{bean.questoes}">
<h:outputText value="#{questao.pergunta}" />
<br />
<h:inputText value="#{pergunta.resposta}" rendered="questao.texto" /> <!-- Questao possui um metodo isTexto() que verifica se o tipo eh igual a "T" -->
<x:umComponenteDate value="#{pergunta.resposta}" rendered="questao.data" /> <!-- Questao possui um metodo isData() que verifica se o tipo eh igual a "D" -->
<h:selectOneRadio="#{pergunta.resposta}" rendered="questao.radio" /> <!-- Questao possui um metodo isRadio() que verifica se o tipo eh igual a "R" -->
<br /><br />
</ui:repeat>
</h:panelGrid>
[/quote]
Boa Rendrys!!! Como não pensei nisso, hehehehehehe. Vou tentar aqui e qualquer coisa peço socorro.
Vlw d+ 
Bom dia, eu estou trabalhando em uma aplicação, um tipo de quiz com perguntas e respostas, mas não consigo inserir os dados no banco de uma forma em que depois possa exibir a questão com as prováveis respostas e o jogador marca a resposta correta.
como eu poderia fazer isso?
Dá pra seguir a mesma lógica…
Uma “questão” possui uma pergunta e uma lista de respostas, sendo que uma delas pode estar marcada com uma flag indicando ser a correta.
Em um pseudo-código, vc teria:
for (questao : questoes) {
text:questao.pergunta
for (resposta : questao.respostas) {
radio/check:resposta
}
}
Tópico de alguns meses de ‘idade’… Mas tem tudo a ver com o que eu quero fazer.
É uma solução parecida…
Usando o rendered.
Mas eu qero ter um select … o cara seleciona o campo e clica num botão.
o botão por ajax, troca o valor da variavel que o ‘rendered’ está…
e com ajax da um update no formulario.
mas nao funcionou 
podem ajudar?