2013-06-20 109 views
0

我有一個簡單的Web應用程序的JSF用在Tomcat 7.0.34JSF + REST Web應用程序在Apache Tomcat運行7

運行的後端服務如果你有一個JSF ManagedBean負責處理數據模型進行渲染UI組件,如何後端服務可以通知JSF對數據模型的更改嗎?

我基本上想弄清楚如何從後端服務中獲得對ApplicationScoped JSF ManagedBeam的引用,但似乎不可能?

我想避免使用輪詢meachanism,其中ManagedBean輪詢後端服務以檢測對數據模型的更改。我嘗試使用CDI和Spring IoC,其中嘗試已證明不成功。

如果需要,我可以提供的示例代碼..

感謝

回答

0

我會反對這項建議。更有意義的是,您的managedbean會爲您的服務添加某種監聽器實現,並以這種方式得到通知。在適當的設計中,您的後端服務不知道您的託管bean存在。

如果你還想這樣做,訣竅是讓Spring管理你的jsf managedbeans,而不是jsf本身。然後,您可以將(應用程序範圍!)託管bean注入到您的服務中。

要爲您的bean使用spring,您需要將Spring解析器添加到faces-config。

<el-resolver> 
    org.springframework.web.jsf.el.SpringBeanFacesELResolver 
</el-resolver> 
+0

感謝球員們,我還沒有嘗試在faces-config中使用Spring解析器方法。當你談論使用監聽器實現時,你會建議看看PropertyChangeListener和PropertyChangeSupport Observer模式的用法嗎? – James

+0

@詹姆斯取決於你的用例。我只是創建一個監聽器接口和實現,支持你想要中繼的消息。它不一定是來自標準API的東西。 –

+0

絕對正確@Joeri,我明白你的觀點! – James

0

也許不是你要找的,但你可以在你的數據模型的方法去計算過你的數據模型中的散列值 - 和值存儲在不包含在哈希計算表。

如果數據模型更改,則後端的存儲過程應更新散列。

儘管您希望避免使用輪詢機制,但您現在有一個您希望知道的值已更改的值。與@ Joeri的答案類似,你的模型和控制器應該是分開的 - 因爲將來可能有多個控制器。

如果您有定期檢查散列的應用程序範圍的bean - 它會不會給你你需要的東西?

+0

雖然這是使用散列方法檢查模型更改的一種很好的方法,但我更願意追求偵聽器實現。但是,如果我無法對我原來的問題取得任何進展,我一定會考慮你所建議的技巧。 – James

相關問題