Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Più che un esempio ti lascio questo link in cui viene spiegato esattamente quali sono i benefici e i maggiori errori del @ViewScope

  2. #12
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43
    mmmmm... correggimi se sbaglio... Un BB @RequestedScoped a differenza di un altro @ViewScoped ha un ciclo di vita leggermente più breve. Il BB View rimane in vita a seguito di un aggiornamento di pagina attraverso ajax mentre viene reinizializzato in ogni altro caso( sia refresh della pagina e sia che un form presente nella stessa pagina richiami nuovamente se steso , sia con GET che con POST ).
    La requested muore istantaneamente.

    Però ho notato una cosa con la ViewScoped che marcando un metodo con l'annotazione @PreDestroy.. nonostante tutti questi casi esso non viene mai invocato... come mai? Devo preoccuparmi io di ucciderlo? Così ci saranno istanze su istanze...

    Grazie ancora ciao

  3. #13
    La risposta alla tua domanda è NI....
    nel senso che il bean in view scoped viene reinizializzato se:
    1) Avviene una navigazione con jsf-redirect=true
    2) La view che ha attualmente invocato un action oppure ha richiesto l'accesso ad un qualche proprietà del BB (metodi get) è diversa dall'ultima view che ha invocato il BB.

    I BB in request scope vengo sempre e comunque reinizializzati ad ogni accesso.

    Sul perchè il @PreDestroy nn ti venga invocato cosi ad occhio nn te lo saprei dire, servirebbero altre informazioni come implementazione di jsf usata, application server usato, un esempio di view e bb in cui è presente il problema.

  4. #14
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43
    La risposta alla tua domanda è NI....
    nel senso che il bean in view scoped viene reinizializzato se:
    1) Avviene una navigazione con jsf-redirect=true
    2) La view che ha attualmente invocato un action oppure ha richiesto l'accesso ad un qualche proprietà del BB (metodi get) è diversa dall'ultima view che ha invocato il BB.
    1)ma viene reinizializzato anche nel caso in cui la navigazione ha JSF-REDIRECT=FALSE.
    2)cioè? praticamente se faccio una navigazione da una pagina verso un'altra pagina ,quest'ultima se invoca metodi sullo stesso BB che utilizzava la prima..esso viene reinizializzato... quindi dovrei effettuare la navigazione sempre sulla stessa pagina, ma non avrebbe senso... :?

    ad esempio, ho 2 pagine xhtml PAGE1 e PAGE2
    PAGE1:
    codice:
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:p="http://primefaces.org/ui">
        <h:head>
            <title>Really simple CRUD</title>
        </h:head>
        <h:body>
            <h:form id="form">
                <h:commandButton value="ok" onclick="#{bean.incrementa()}">
                    <p:ajax event="click" update="form"/>
                </h:commandButton>
                <h:commandButton value="vai" action="page2">
                </h:commandButton>
                <h:outputText value="#{bean.value}"/>
            </h:form>
        </h:body>
    </html>
    PAGE2:
    codice:
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:p="http://primefaces.org/ui">
        <h:head>
            <title>example</title>
        </h:head>
        <h:body>
            <h:form id="form">
                <H2> PAGE2 </H2>
                <h:outputText value="VALUE:#{bean.value}"/>
            </h:form>
        </h:body>
    </html>
    questo è il BEAN:
    codice:
    package bean;
    import java.io.Serializable;
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;
    import javax.faces.bean.ViewScoped;
    
    @ManagedBean
    @ViewScoped
    public class Bean implements Serializable {
    
        private int value;
    
        /**
         * Get the value of value
         *
         * @return the value of value
         */
        public int getValue() {
            return value;
        }
    
        /**
         * Set the value of value
         *
         * @param value new value of value
         */
        public void setValue(int value) {
            this.value = value;
        }
    
        @PostConstruct
        public void init() {
            System.out.println("initttttttt");
            value = 0;
        }
    
        @PreDestroy
        public void fine() {
            System.out.println("SONO MORTO");
        }
    
        public void incrementa() {
            value++;
        }
    }
    e questo è FACES-CONFIG.XML:
    codice:
    <faces-config version="2.1"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/we...config_2_1.xsd">
        <navigation-rule>
            <from-view-id>/page1.xhtml</from-view-id>
            <navigation-case>
                <from-action>page2</from-action>
                <to-view-id>/page2.xhtml</to-view-id>
            </navigation-case>
        </navigation-rule>
    </faces-config>
    Solo con la navigazione il metodo @PreDestroy viene invocato ... mentre in altri casi (ad esempio clicco su qualche link ecc ecc non viene invocato...)

    JSF2 + glassfish server

  5. #15
    Originariamente inviato da Flaka
    2)cioè? praticamente se faccio una navigazione da una pagina verso un'altra pagina ,quest'ultima se invoca metodi sullo stesso BB che utilizzava la prima..esso viene reinizializzato... quindi dovrei effettuare la navigazione sempre sulla stessa pagina, ma non avrebbe senso... :?
    Riporto la risposta precendente
    La view che ha attualmente invocato un action oppure ha richiesto l'accesso ad un qualche proprietà del BB (metodi get) è diversa dall'ultima view che ha invocato il BB.

    Mi sembra che sia proprio questo il caso....

    Solo con la navigazione il metodo @PreDestroy viene invocato ... mentre in altri casi (ad esempio clicco su qualche link ecc ecc non viene invocato...)
    E' ovvio che il @PreDestroy ti viene invocato solo quando quel bean viene distrutto....
    Cioè come detto prima in caso di navigazione etc....

  6. #16
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43
    Originariamente inviato da francesco.muia
    Riporto la risposta precendente
    La view che ha attualmente invocato un action oppure ha richiesto l'accesso ad un qualche proprietà del BB (metodi get) è diversa dall'ultima view che ha invocato il BB.

    Mi sembra che sia proprio questo il caso....
    Sisi appunto per questo dico che comunque in ogni caso di navigazione il bean muore.. perchè rimane limitato sempre all'interno della stessa pagina..

    Comunque ti ringrazio molto, questa discussione è stata molto bella ed utile!

  7. #17
    Lo dice la parola stessa @View (Vista, pagina).
    Nulla è stato un piacere. (Ho rinfrescato la mia memoria....)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.