Realizar perguntas ao usuário em tempo de execução (JOptionPane Web)

22 respostas
ataufo

Pessoal,

estou fazendo um “sistema especialista” (pode abstrair oq é) e estou com o seguinte problema:

Eu tenho uma lista de objetos, e para cada elemento dessa lista, eu preciso realizar algumas perguntas sobre esse objeto para o usuário.

Eu tenho 15 perguntas já definidas, e elas variam de acordo com as respostas.
Exemplos:
Realizo a pergunta 2 somente se o usuário respondeu ‘sim’ na pergunta 1.
Se usuário responder ‘sim’ na pergunta 8 retornar para a pergunta 5.

Isso seria simples em um sistema desktop, onde eu realizaria um for e solicitaria as respostas através de um JOptionPane. Porém não da pra utilizar um JOptionPane em um sistema Web, e eu não conheço nenhuma forma de realizar perguntas para o usuário dentro de uma iteração.

Eu estou pensando em enviar as 15 perguntas e colocar cada uma em Divs na JSP, e ir controlando a exibição das perguntas via javascript. Porém eu preciso de 15 perguntas para cada elemento da lista, ou seja, caio denovo no problema da iteração.

Alguem me da uma luuuuuuz ???

Agradeço muito !!!

22 Respostas

davidbuzatto

Qual o problema com a iteração? Não existe for no Javascript?

[]´s

ataufo

existe sim, porém não é realizar um for no javascript. eu tenho que carregar uma página diferente (com suas 15 perguntas) para cada elemento de uma lista…

davidbuzatto

Pq não usa ajax p/ obter as perguntas?

ataufo

Obter as perguntas não é o problema… é dificil de explicar mesmo.

Assim, eu tenho uma lista List<Requisito> listaRequisito, nesse objeto Requisito eu tenho um nome que vou usar nas perguntas. Por exemplo: O requisito [nome do requisito] é um requisito funcional?

Para cada requisito eu tenho 15 perguntas dessas dinamicas.

Ou seja, eu vou ter uma tela com essas perguntas, e quando acabar de fazer as perguntas de um requisito, iniciar as perguntas do próximo requisito. O ajax não iria me ajudar a verifiqual qual é o proximo requisito e montar as perguntas dele.

sacou?

davidbuzatto

Saquei sim.
Pq não?

Você pode primeiro, obter todos os ids dos requisitos e manter em um array que vai ser processado pelo javascript.
A partir desse momento, vc embaralha os dados do array e começa a pegar um id de cada vez.
Pegou um id, utiliza uma requisição assíncrona e pega todas as perguntas p/ aquele id e assim por diante.
Assim que o usuário responder um lote de 15 perguntas e antes de vc carregar as próximas 15, vc então já salva as 15 anteriores (usando ajax tbm).

[]´s

ataufo

Só pra ter uma ideia, se fosse desktop eu faria assim:

for(Requisito requisito : listaRequisito){
				resposta = JOptionPane.showInputDialog("1 - O requisito"+requisito.getNome()+"é funcional?");
                                
                if(resposta.equals("sim")){
                	resposta = JOptionPane.showInputDialog("2 - O requisito"+requisito.getNome()+" identifica um caso de uso?");
                }

                if(resposta.equals("sim")){
                	resposta = JOptionPane.showInputDialog("3 - Esse Caso de Uso extensão para outro Caso de Uso?");
               }
				
				// E por ai vai
			}

Porém não da pra fazer isso, pois não consigo interromper a execução do código e realizar perguntas para o usuário em sistema web.

OBS: To pensando nisso ai que você escreveu, e já respondo

ataufo

nesse caso, como eu consigo enviar a lista de requisitos (ou lista de ids) para o javascript?

imagino o envio da lista por request, mas eu consigo pegar essa lista no javascript?

davidbuzatto

Ataufo, independente de como o questionário vai ser executado, acredito que a maneira mais fácil de fazer seja usando ajax mesmo.
Sabendo usar o javascript direitinho, conhecendo um pouco de JSON e usando uma biblioteca boa (recomendo a jQuery) você pode fazer tudo isso facilmente.

[]´s

davidbuzatto

Crie um servlet que escreve no response o texto que vai conter os dados dos requisitos.
Esse texto pode ser formatado como XML ou como JSON (prefiro JSON).

Usando a jQuery, vc obtém os dados do servlet e os processa. O mesmo procedimento é feito com a parte das perguntas, só que agora seu servlet vai receber um parâmetro, que é o id do requisito q vc quer carregar as perguntas. Baseado no id, o servlet escreve os dados no response, ou seja, as perguntas, e o jQuery as obtém.

A jQuery tem uma função para trabalhar com ajax e JSON, ela se chama getJSON. Olha a documentação: http://api.jquery.com/jQuery.getJSON/
Sobre JSON, http://www.json.org/

[]´s

ataufo

infelizmente não vou ter tempo para aprender outros frameworks, mas valeu deu pra me dar algumas ideias. obrigado

davidbuzatto

Bem, é aquela história, se conselho fosse bom, a gente não dava, a gente vendia, mas mesmo assim te aconselho a estudar a jQuery.
Depois que você aprende a usar, vc vai ver que todo o tempo “perdido” não foi em vão e não vai se conformar de nunca ter aprendido e não vai mais conseguir viver sem usar :wink:
JSON não é um framework, mas sim uma notação para representar objetos Javascript usando Strings.

[]´s

tc_medeiros

Ataufo, se eu entendi bem o que você quer o problema é mais na interação do que na busca de dados. Caso suas respotas forem somente sim e não, você pode usar a função confirm. Caso você precise de resposta mais elaboradas pode usar a função prompt.

Espero ter ajudado,

luistiagos

Faz o seguinte fio… faça uma TagLib que processa um grafo de de perguntas… la vc faz seu for normal… e renderiza um html especifico para cada requisito…

ataufo

tc_medeiros, desculpe mas o que é função confirm e prompt ?

luistiagos

são 2 funções de caixa de dialogo do javascript… http://www.tiexpert.net/programacao/web/javascript/alert-confirm-prompt.php

ataufo

bem interessante essas funções, não as conhecia.

Pena que eu precisaria de um prompt onde em vez de um input text, seria uma combo de seleção simples.

Valeu obrigado.

tc_medeiros

Cara é javascript, dá uma olhada na no Google que vc acha exemplos, é muito simples, é tipo o JOptionPane, só que em javascript.

ataufo

sim já entendi que é javascript. porém não me atende.

obrigado

luistiagos

ataufo:
sim já entendi que é javascript. porém não me atende.

obrigado

Tag-libs não o atendem?

ataufo

talvez… mas nao conheço muito de taglib…

eu acho que eu vou usar essa lista na sessão mesmo… assim que eu realizar as perguntas de um Requisito eu removo o mesmo dessa lista e prossigo.

luistiagos

ataufo:
talvez… mas nao conheço muito de taglib…

eu acho que eu vou usar essa lista na sessão mesmo… assim que eu realizar as perguntas de um Requisito eu removo o mesmo dessa lista e prossigo.

Meio gambiarrento… mas pode funcionar…

ataufo

é estava tentando fugir disso… mas…

Criado 6 de outubro de 2010
Ultima resposta 8 de out. de 2010
Respostas 22
Participantes 4