6
A
回答
11
有幾種方法。如果託管的bean彼此相關,最簡潔的方式將是託管屬性注入。假設Bean1具有與Bean2相同的範圍或更廣的範圍。先舉一個Bean2財產Bean1:
public class Bean2 {
private Bean1 bean1; // +getter +setter.
}
然後在faces-config.xml
聲明Bean1是Bean2的託管屬性:
<managed-bean>
<managed-bean-name>bean1</managed-bean-name>
<managed-bean-class>com.example.Bean1</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>bean2</managed-bean-name>
<managed-bean-class>com.example.Bean2</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>bean1</property-name>
<value>#{bean1}</value>
</managed-property>
</managed-bean>
這樣的bean2
實例具有的bean1
實例的即時訪問。
如果由於某些原因不想使用託管屬性注入,那麼您還可以通過編程方式獲取Application#evaluateExpressionGet()
。這裏的檢索Bean1內Bean2的例子:
FacesContext context = FacesContext.getCurrentInstance();
Bean1 bean1 = (Bean1) context.getApplication().evaluateExpressionGet(context, "#{bean1}", Bean1.class);
的Bean1必須在faces-config.xml
託管bean bean1
但是已經聲明。
有關在JSF內部傳遞數據的更多信息和提示,您可能會發現this article有用。
4
爲了增加BalusC的答案,如果您使用的是依賴注入框架(春,吉斯等),或者如果使用JSF 2.0,你可以有一個託管bean設置成其他只使用:
@Inject
private Bean2 bean2;
(或根據您的DI框架相應的註釋)
相關問題
- 1. 在託管bean之間傳遞參數
- 2. 在子組件之間傳遞數據
- 3. 組件之間的數據傳遞Angular4
- 4. 在JSF頁面之間傳遞參數
- 5. 在託管代碼中傳遞非託管數據?
- 6. 在託管bean與請求範圍之間傳遞參數
- 7. 在PHP文件之間傳遞數據
- 8. 在Angular中的兄弟組件之間傳遞數據
- 9. 在Angular 2中獨立組件之間傳遞數據
- 10. 將數組從託管代碼傳遞到非託管C++ ActiveX組件
- 11. JSF:在2個視圖之間傳遞數據
- 12. 在JSF頁面之間傳遞信息
- 13. 如何通過引用非託管庫傳遞託管數組?
- 14. 將二維數組從託管C++傳遞到非託管C++
- 15. JSF託管的上傳bean?
- 16. 在組件間傳遞數據reactjs
- 17. ReactJS在組件之間傳播數據
- 18. asp.net:使用委託在頁面之間傳遞數據
- 19. 在函數之間傳遞數組C++
- 20. 在託管bean之間傳遞實例變量
- 21. JSF2.0在託管bean之間傳遞值對象
- 22. 在託管對象上下文之間傳遞對象
- 23. 傳遞數據之間
- 24. 如何在組件之間傳遞大量數據
- 25. Angular2在NON父子組件之間傳遞數據
- 26. 在2組件之間傳遞數據的可觀察/訂閱
- 27. 嘗試在組件之間傳遞數據時未定義
- 28. 在反應不相關的組件之間傳遞數據
- 29. 在組件之間傳遞數據問題
- 30. 爲什麼Android使用parcel在組件之間傳遞數據?
這個工作在JSF 2.0關於Java EE 6爲好。 – BalusC 2010-01-25 12:28:25
應該是@Inject private Bean1 bean1;如果這在Bean2中被引用。 (與BalusC的例子同步) – 2012-02-23 14:51:55