2012-03-07 20 views
6

Ho una pagina di generazione report in cui ho pochi filtri come countryId, Date e pochi altri parametri che l'utente può selezionare. Ora in base ai parametri scelti, c'è una chiamata al database che utilizza questi parametri per recuperare un elenco di risultati.Accesso ai valori di un bean gestito JSF in un altro bean gestito

Ora il bean gestito contiene tutti questi parametri di ricerca e l'elenco dei risultati .let noi nominare questo fagiolo come Bean1

public class Bean1 implements Constants{ 
    private List<SelectItem> countryList; 
    private List<String> choosenCountryList; 
    private List<String> choosenProgramList; 
    private String invoiceDatePriorTo= CalendarUtilities.getTodaysDate() ; 
    private List<CustomResults> searchResultList 
} 

Abbiamo un altro bean gestito Bean2 che contiene una proprietà di Bean1

public class Bean2 implements Constants { 
    private Bean1 bean1; 

    public getSearchResults(){ 
     //Code for fetching the search list for bean 1 
     this.setsearchResultList() //=fetched list from DB; 
    } 

    public modifySearchResults(){} 
} 

Ora quando sul trigger di un'azione dalla pagina JSF chiamiamo il metodo getSearchResults() e impostiamo lo searchResultList da visualizzare sullo schermo. In questo modo siamo in grado di visualizza l'elenco di ricerca sullo schermo

Ora l'elenco che otteniamo è soggetto alla modifica dell'utente sullo schermo. Ora quando chiamiamo nuovamente modifySearchResults per modificare l'elenco non siamo in grado di recuperare l'elenco nel bean2 perché il bean gestito è in ambito di richiesta.

Qualcuno può dirmi come procedere e risolvere questo problema?

risposta

11

Basta dichiarare il vostro bean di dati come managedProperty

Dalla marcatura presumo i suoi circa JSF2.0

È necessario dichiarare bean1 come proprietà gestita in bean2

Dovrebbe apparire come

@ManagedBean 
public class Bean1{ 
} 

e

@ManagedBean 
public class Bean2{ 

    @ManagedProperty(value="#{bean1}") 
    Bean1 bean1; 
    //setter & getter of bean1 

} 

Vedere anche

+0

u può elaborare po 'su quello che vuoi che io faccia ?? – Sam

+1

Hai letto l'articolo? –

+0

yes in my bean2 bean1 è già una proprietà gestita ... – Sam

4

Bene hai detto tu stesso. Devi spostare il bean da RequestScope.

A seconda della vostra applicazione si consiglia di utilizzare:

  • @SessionScoped
  • @ViewScoped

Here si può trovare un articolo sulla scelta del campo di applicazione a destra.

In secondo luogo, si consiglia di utilizzare Iniezione delle dipendenze. JSF ha il simpatico @ManagedProperty. Potete leggere di più su di esso here.

EDIT

Vedendo ora che non si desidera utilizzare la sessione un'altra soluzione che mi viene in mente è la seguente:

@ManagedBean 
@ViewScoped 
public class Bean1 implements Constants{ 
    private List<SelectItem> countryList; 
    private List<String> choosenCountryList; 
    private List<String> choosenProgramList; 
    private String invoiceDatePriorTo= CalendarUtilities.getTodaysDate() ; 
    private List<CustomResults> searchResultList 

    public getSearchResults(){ 
     // Your code here 
    } 

    public modifySearchResults(){ 
     // Your code here 
    } 
} 

Come ha detto il problema è che si può salva tutte le informazioni da una richiesta alla successiva. Di solito questo è il caso in cui normalmente viene utilizzato lo @ApplicationScoped o @ViewScoped. Per diversi motivi questa potrebbe non essere la soluzione migliore in alcuni casi.

Per il tuo esempio, inserire tutti i metodi in un bean che è @ViewScoped potrebbe essere la soluzione migliore. Questo approccio viene fornito con i suoi svantaggi, ma penso che questo è buono come si ottiene ..

Here si può leggere di più su questo argomento.

+0

Non voglio usare l'ambito della sessione ..è lì un altro modo per farlo. – Sam

+0

@Sam Beh, penso che tu possa avvicinarti a questo in un modo diverso. Posiziona 'getSearchResults()' in 'Bean1' e annota questo bean con' @ ViewScoped'. In questo modo sarai in grado di accedere a tutte le informazioni finché non cambierai la visualizzazione. – Ionut

+0

@Sam Aggiornamento della risposta. – Ionut

Problemi correlati