當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
基于jsf的项目_JSF基于事件的沟通:过时的方法
生活随笔
收集整理的這篇文章主要介紹了
基于jsf的项目_JSF基于事件的沟通:过时的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于jsf的項目
用JSF編寫的Web應用程序由相互交互的bean組成。 在開發Web應用程序時,bean之間的通信是主要的設計模式之一。 有時,一個bean需要將事件發送給其他bean,以通知它們某些更改或其他任何更改。 通常,我們可以將托管bean或Spring bean注入另一個bean的屬性中,以便另一個bean可以直接通知注入的bean。 注入是好的,但是它并不是出于交流目的而引入的。 它與每個豆都不知道其他Bean的動態松耦合系統相距甚遠。 在松耦合系統中,我們需要一個良好的基于??事件的通信機制。 這篇文章將涵蓋兩種設計模式:觀察者/事件監聽器和中介者模式。 這些模式如今已在許多Web應用程序中廣泛使用,但是它們具有缺點。 該系統并不是真正與它們松散耦合。 有很多更好的現代方法。 因此,我在帖子名稱中寫了“ Old-school approach”。 新學校的方法將在下一篇文章中公開。 觀察員/事件聽眾
?
其次,我們需要一個接口LocaleChangeListener。
public interface LocaleChangeListener extends EventListener {void processLocaleChange(LocaleChangeEvent event); } 我們的UserSettingsForm現在可以通過注冊字符串并通知它們來管理LocaleChangeListener類型的實例。 @ManagedBean @SessionScoped public class UserSettingsForm implements Serializable {private Locale selectedLocale;private List<SelectItem> locales;private List<LocaleChangeListener> localeChangeListeners = new ArrayList<LocaleChangeListener>();public void addLocaleChangeListener(LocaleChangeListener listener) {localeChangeListeners.add(listener);}public void localChangeListener(ValueChangeEvent e) {...// notify listenersLocaleChangeEvent lce = new LocaleChangeEvent(this, this.selectedLocale);for (LocaleChangeListener lcl : localeChangeListeners) {lcl.processLocaleChange(lce);}}... } 方法localChangeListener()是JSF ValueChangeListener,可以在例如h:selectOneMenu中應用。 每個實現LocaleChangeListener的bean都應該由UserSettingsForm注冊,以便通過語言環境更改得到通知。 @ManagedBean @SessionScoped public MyBean implements LocaleChangeListener, Serializable {// UserSettingsForm can be injected e.g. via @ManagedProperty annotation or via Spring facilityprivate UserSettingsForm userSettingsForm;@PostConstructpublic void initialize() {userSettingsForm.addLocaleChangeListener(this);}public void processLocaleChange(LocaleChangeEvent event) {// reset something related to I18N data...} }根據觀察者模式,UserSettingsForm是可觀察的,而LocaleChangeListener的實例(如MyBean)是觀察者。 討論的模式帶有一些您需要注意的重要問題。 豆緊密耦合。 有很多手動工作來重新注冊bean。 Bean必須實現定義的接口。 如果您有一個通過100個語義不同的更改通知的bean,則它必須實現100個接口。 無法通知已注冊的偵聽器的子集–即使不需要通知所有偵聽器,也總是會通知他們。 最后但并非最不重要的– 內存管理問題 。 馬丁·福勒(Martin Fowler)寫道: “假設我們有一些觀察某些域對象的屏幕。 關閉屏幕后,我們希望將其刪除,但是域對象實際上通過觀察者關系攜帶了對屏幕的引用。 在內存管理的環境中,壽命長的域對象可能會占據很多僵尸屏幕,從而導致大量內存泄漏。”
調解員
?
參考: JSF中基于事件的通信。 我們的JCG合作伙伴 Oleg Varaksin在軟件開發思想博客上的老式方法 。
翻譯自: https://www.javacodegeeks.com/2012/07/jsf-event-based-communication-old.html
基于jsf的項目
總結
以上是生活随笔為你收集整理的基于jsf的项目_JSF基于事件的沟通:过时的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用插件生成自定义Java 8代码
- 下一篇: win10 2004更新错误0xc190