h: commandButton no funciona dentro de h: dataTable

Estoy tratando de ejecutar una action través de commandButton dentro de una dataTable , pero la action no se invoca cuando el commandButton se coloca dentro de la tabla de datos como se muestra a continuación

        

Cuando muevo commandButton fuera de dataTable , la action se ejecuta con éxito. ¿Cuál es el problema cuando commandButton está dentro de datatable? El commandLink tiene el mismo problema.

Este problema puede ocurrir cuando la lista detrás de #{bean.list} no es exactamente la misma durante la solicitud HTTP de procesar el envío del formulario como lo fue durante la solicitud de mostrar el formulario. JSF se repetirá sobre la lista para ubicar el botón presionado e invocar su acción.

Si el bean tiene un scope solicitado y la lista no se vuelve a llenar durante la construcción de Bean (post), o la población de la lista depende de una variable de ámbito de solicitud que se perdió durante el envío del formulario, JSF recuperará una lista vacía o completamente diferente mientras procesa el formulario enviado y por lo tanto no podrá ubicar el botón presionado y no invocará ninguna acción.

La mejor solución es colocar el bean en el scope de la vista y asegurarse de que está cargando el modelo de datos de la manera adecuada.

 @ManagedBean @ViewScoped public class Bean implements Serializable { private List list; @EJB private ItemService service; @PostConstruct public void init() { list = service.list(); } // ... } 

Ver también:

  • commandButton / commandLink / ajax action / listener method no invocado o input value no actualizado – point 4
  • Beneficios y trampas de @ViewScoped