Estou quebrando a cabeça em uma coisa que talvez seja simples, porem ainda não cheguei em uma solução. Tenho uma tabela que lista questões de uma avaliação e nela tenho inputText onde é digitada a nota para cada uma das questões, meu problema esta em armazenar essas notas em uma lista para conseguir salvar posteriormente, pois é usado o mesmo value para todos os inputText. Já tentei usar ajax para criar a lista porem sem sucesso. Alguem poderia auxiliar?.
Olá Rof, primeiramente obrigado pelo contato. Segue o código:
//Trecho da tabela onde esta o inputText
<p:inputMask mask="9" style="font-size:4px;width:40;height:20"
value="#{preenchimentoBacking.notaSelecionada}" maxlength="1">
<p:ajax listener="#{preenchimentoBacking.capturaNota}"
event="blur" process="@this" />
</p:inputMask>
private List<QuestaoAvaliacao> listaQuestaoAlunos;
private List<Matric_disciplina> listaDisciplinas;
private List<Alternativas> listaQuestao;
private List<Double> listaNotaAtribuida = new ArrayList<Double>();
private Double notaSelecionada;
//método onde estou tentado adicionar o valor do input na lista
public void capturaNota() {
listaNotaAtribuida.add(notaSelecionada);
}
//método que salva.
public void finalizaAvaliacao() {
try {
if (digAlun != null) {
for (int i = 0; i < listaQuestaoAlunos.size(); i++) {
for (int y = 0; y < listaDisciplinas.size(); y++) {
for (int j = 0; j < listaNotaAtribuida.size(); j++) {
digAlun.setNota(listaNotaAtribuida.get(j));
digAlun.setAvl(av);
digAlun.setQuestao(listaQuestaoAlunos.get(i)
.getQuestao());
digAlun.setTurma(listaDisciplinas.get(y).getTurma());
digAlun.setUsuario(usuario);
digAlun.setDataPreenchimento(new Date());
abDAO.saveOrUpdate(digAlun);
digAlun = null;
reset();
}
}
}
JSFUtil.addInfoMessage("Avaliação finalizada com sucesso!. Agradecemos sua participação!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
Ele nao executa em momento nenhum, ja tentei colocar inputText comum e tambem nao funcionou. O mais engraçado ainda é que não esta ocorrendo nenhum erro. Não cheguei fazer o Debug. Percebi que quando troco o process="@this" por @all ele executa o evento e da erro por estar tentando inserir algo null.
tira o proccess, pode retirar ele todo, e testa sem ele. Vou pegar um projeto meu aqui em JSF pra testar algo pra voce, so espera um pouco, maquina aqui é lenta.
cara valeu, mas o problema não é esse não, até fiz o que vc pediu. Vale lembrar que com apenas um inputText eu consigo fazer funcionar, mas no meu caso eu tenho vários input utilizando o mesmo value, pois todos estao em uma tabela.
[quote=renanlalier]cara valeu, mas o problema não é esse não, até fiz o que vc pediu. Vale lembrar que com apenas um inputText eu consigo fazer funcionar, mas no meu caso eu tenho vários input utilizando o mesmo value, pois todos estao em uma tabela.
Mais alguma sugestão?
Valeu.
Renan.[/quote]
Era pra funcionar, independente da quantidade de inputTexts que voce tem, a lista iria armazenar de um por um sem problemas. Estranho, ou realmente nao entendi o seu problema, ‘-’. Voce quer ir informando notas a cada inputText, e a cada mudança de foco ir armazenando numa lista, so que acho que talvez seja esse seu problema, ja que todos tem o mesmo value, logo, se voce sair do foco do input numero 10, essa lista vai pegar o valor de TODOS os inputs, ja que todos tem o mesmo value, acho que o correto seria voce informar um vetor entao, ou entao uma variavel diferente para cada input, porque se realmente todos tem o mesmo value, e voce esta submetendo via ajax a nota de 1, logo vce estara submetendo a nota de todos. Independente de qual ira perder o foco, visto que o bean pegara pelo nome do atributo.