modo corretto di recuperare un'altra istanza bean dal contesto
-
13-10-2019 - |
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?
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:
- Comunicazione in JSF2
- Get JSF bean gestito per nome in ogni classe correlata Servlet
- (@ManagedBean) o fagioli CDI (@Named)?
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.