viewscope tipos sessionscoped example bean applicationscoped jsf-2 view-scope

jsf-2 - tipos - viewscope primefaces



JSF ViewScope: devolver acciones nulas no actualiza la vista (1)

Usted estaba usando <p:commandButton> para enviar el formulario. Envía por defecto una solicitud ajax. Actualiza por defecto nada. El comportamiento que estás observando es completamente esperado. Hay varias maneras de resolver este "problema" (citado, ya que en realidad no es un problema, sino simplemente un malentendido conceptual):

  1. Dile que no use ajax.

    <p:commandButton ... ajax="false" />

  2. Dile que actualice el formulario.

    <p:commandButton ... update="@form" />

  3. Reemplace por el componente JSF estándar, que no usa ajax por defecto.

    <h:commandButton ... />

Tenga en cuenta que este problema concreto no está relacionado con el alcance de la vista en sí. Tendría exactamente el mismo problema (con exactamente las mismas soluciones) cuando usa otro ámbito, incluido el alcance de la solicitud.

Tengo un Bean administrado en el modo ViewScope. Entonces, cuando llamo a alguna acción desde este Managed Bean, mi página no se actualiza. Veo que mi acción se invoca bien y devuelve nulo (el flujo de trabajo del viewcope está bien).

Entonces, ¿qué estoy haciendo mal?

Si renuncio a la página usando Ajax, funciona bien.

EDITAR:

Mis versiones son:

JSF 2.1.14 con Primefaces 3.4.1

Mi código:

@ManagedBean(name = "test") @ViewScoped public class TestMB implements Serializable { private String status; public String getStatus() { return this.status; } public void setStatus(String status) { this.status = status; } public String changeStatus() { this.status = "ViewScope Works!"; return null; } }

Mi página:

<!DOCTYPE HTML> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" template="/template/ui.xhtml"> <ui:define name="head"> </ui:define> <ui:define id="teste" name="content"> <h:form id="form"> <h:outputText id="status" value="OK?: #{test.status}" /> <p:commandButton id="myAction" value="Do it!" action="#{test.changeStatus}" /> </h:form> </ui:define> </ui:composition>

En mi pantalla, la variable de estado no cambia. Y, sí ... la acción se llama OK. ¿Algún consejo?