¿Cómo lidiar con instancia 'caché' en la página @ViewScoped?

Azro:

Aplicación funcionando con JSF, Primefaces, eclipselink, no es una aplicación pequeña, alrededor de 100 páginas / frijol todo funciona a la perfección

Tengo la comprensión de algunas dificultades cómo mis @ViewScopedpágina funciona, tengo un selectcomponente de interfaz de usuario, llenos de un simple List<People>y un back-end selectedPeopleen mi frijol


// all getters, setters, JPA annotations, all good
public class People {
    private String name;
    private List<Car> cars;
}

@ManagedBean
@ViewScoped
public class PeopleBean {
    @EJB
    private Service sPeople;
    private People selectedPeople;
    private List<People> listPpl;

    @PostConstruct
    public void init(){
        listPpl = sPeople.readAll();      // always good, same as DB values
    }

    public People getSelectedPeople(){
       return selectedPeople;
    }

    public People setSelectedPeople(People p){     // p is an old element
       selectedPeople = p;                         // BREAKPOINT
    }

    // getter for the list too
    public void method(){
        Logger.getAnoymousLogger().severe(selectedPeople.getCars()); // the one the old people, not the ne contained in the actual list
    }
}

<p:selectOneMenu id="selectP" value="#{peopleBean.selectedPeople}" converted="#{genericSecuerdConverter}" >
    <p:ajax event="change" partialSubmit="true" listener="#{peopleBean.method()}" />
    <f:selectItems value="#{peopleBean.listPpl}" var="people" itemLabel="#{people.name}" itemValue="#{people}" />
</p:selectOneMenu>

Secuencia de uso y es un problema (información tomada de depuración):

  • ir a peoplePage.xhtmldonde el elemento de selección es, IDsde un elemento de la lista son #410, #411, #412(3 personas)
  • ir a modif.xhtml, cambiar las personas (3ª quitar una car, guardados en DB (cheque en dB))
  • volver a la peoplePage.xhtmllista está bien, IDsen la depuración son#650, #651, #652
  • cambiar el valor (de null) de la selectUI para elegir un pueblo, y en el punto de interrupción, pque parece ser el #412elemento, por lo que los cambios en la lista de su coche no son visibles, que no proviene de la listPpl(porque contiene sólo elementos y corresponde válidos a DB), es una especie de almacenamiento en caché

He intentado desactivar ecpliselink caché como estados caché EclipleLink

  • cambiar EclipseLink propiedad
  • el cambio de la APP Propery
  • utilizar @Cacheable(false)

Nadie tenía un efecto, ni ir a la navegación privada ni borrar la caché del navegador y volver a la página, el pelemento sigue siendo el viejo de la primera carga

Pensé que @ViewScopedpermite abrir una página cada vez como si fuera la primera vez, pero no parece, no puede figura en la que el elemento puede almacenarse / caché


Editar He utilizado una solución por el momento, pero esto es obviamente la mejor solución o

public People setSelectedPeople(People p){    
    if(p!=null)
        selectedPeople = sPeople.read(p.getId());                         
}
Hash:

Lo que se busca es @RequestScoped. Se va a crear todo lo que cada uno y cada vez que se hace una petición HTTP adecuado. De lo contrario, no se garantiza que destruir los @ViewScopedgranos. Un ejemplo en la documentación Omnifaces: ViewScoped .

Esta característica podría ser utilizado para ayudar a la reconstrucción de la página cuando el usuario está utilizando la parte trasera y botones de avance del navegador, por ejemplo.

@RequestScoped frijol vive tanto tiempo como la vida petición-respuesta HTTP. Que se crea en una petición HTTP y se destruye cuando la respuesta HTTP asociado con la petición HTTP está terminado.

@ViewScoped frijol vive, siempre y cuando el usuario está interactuando con la misma vista en el JSF / pestaña de la ventana del navegador. Que se crea en una petición HTTP y se destruye una vez que las devoluciones de datos de usuario a un punto de vista diferente.

Fuente de la descripción: https://www.tutorialspoint.com/jsf/jsf_managed_beans.htm

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176115&siteId=1
Recomendado
Clasificación