jsf-2 - limpiar - primefaces form
Campo de entrada agregado dinámicamente en ui: repeat no se procesa durante el envĂo del formulario (1)
Estoy tratando de hacer un formulario de entrada para las respuestas en mi aplicación y comienzo con cuatro respuestas "vacías" que la vista pasa y crea campos de entrada para. Tengo un botón de agregar respuesta que agrego una pregunta a la matriz de respuestas y luego la vista representa las respuestas nuevamente, pero ahora con un campo de entrada adicional. El bean de respaldo es viewcoped. Sin embargo, si envío el formulario sin presionar el botón Agregar respuesta, todo funciona. Los datos se guardan en la base de datos. Pero si agrego una respuesta después de que se completen las cuatro, la última no obtiene los datos del campo de entrada (answer.description). Si presiono Agregar respuesta primero (sin completar ningún campo de entrada) los datos de los campos no se capturan en absoluto, dejando los 5 vacíos para que no se guarden datos en la base de datos.
Tengo esto en la forma:
<ui:repeat var="answer" value="#{bean.answers}">
<div class="field">
<h:outputLabel for="answerAlternative-#{answer.serialNumber}"
value="Svaralternativ #{answer.serialNumber}" />
<h:inputText id="answerAlternative-#{answer.serialNumber}"
value="#{answer.description}" size="40" />
</div>
</ui:repeat>
Este es el método para crear un nuevo campo de entrada:
public String addAnswer() {
if (answers.size() + 1 < 6) {
Answer answer = new Answer();
answer.setSerialNumber(answerSerialNumber + "");
answerSerialNumber++;
answers.add(answer);
}
return null;
}
Se usa para inicializar la matriz de respuestas con cuatro campos de entrada vacíos:
@PostConstruct
public void initBean() {
answers = new ArrayList<Answer>();
for (int i = 0; i < 4; i++) {
addAnswer();
}
}
Este aspecto coincide con los problemas actuales de <ui:repeat>
en Mojarra. Está totalmente roto en Mojarra.
Tienes básicamente 2 opciones:
- Reemplaza Mojarra por MyFaces, que tiene una implementación mucho más estable de
<ui:repeat>
. - Use un componente
UIData
lugar de<ui:repeat>
, por ejemplo,<h:dataTable>
, Tomahawk''s<t:dataList>
, PrimeFaces ''<p:dataList>
, etc.