Domanda

Stiamo utilizzando il seguente codice per ottenere l'istanza bean gestito dal contesto.

FacesUtils.getManagedBean("beanName");

E 'il modo corretto di farlo ?. Se più utenti accedono alla stessa di fagioli che cosa accadrà? Come vengono gestite le istanze di fagioli?

È stato utile?

Soluzione

Dato FacesUtils non fa parte della implementazione JSF di serie, non è chiaro che cosa sta effettivamente facendo sotto le coperte.

In ogni caso, quando si è già all'interno di un bean gestito, quindi il modo migliore è quello di iniettare l'altro bean come proprietà gestita. Darò per scontato che è già in corso JSF 2.0, quindi ecco una JSF 2.0 mirato esempio.

@ManagedBean
@SessionScoped
public void OtherBean {}

@ManagedBean
@RequestScoped
public void YourBean {

    @ManagedProperty("#{otherBean}")
    private void OtherBean;

    @PostConstruct
    public void init() {
        otherBean.doSomething(); // OtherBean is now available in any method.
    }

    public void setOtherBean(OtherBean otherBean) {
        this.otherBean = otherBean;
    }

    // Getter is not necessary.
}

Ma quando sei ancora in JSF 1.x, allora avete bisogno di farlo con la voce <managed-property> in faces-config.xml come spiegato in questa domanda: passaggio di dati tra i fagioli gestito .

Se vi capita di usare CDI @Named invece di JSF @ManagedBean, uso @Inject invece di @ManagedProperty. Per questo, non è richiesto un metodo setter.

Vedi anche:


Per quanto riguarda la vostra preoccupazione

Se più utenti accedono alla stessa di fagioli che cosa accadrà? Come vengono gestite le istanze di fagioli?

Sono gestiti da JSF. Se viene trovata una fava, quindi JSF sarà solo tornare esattamente questo fagiolo. Se non viene trovata alcuna fagioli, poi JSF sarà solo creare automaticamente uno e mettere nel campo di applicazione associata. JSF non sarà inutilmente creare più fagioli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top