對於一個項目,我們正在將一些Java應用程序遷移到WebSphere 8.5。在這個過程中,我們試圖擺脫一些遺留的框架。其中之一是shale(apache attic)。從頁面使用的唯一組件是視圖控制器來爲每個頁面實例化一個請求作用域jsf託管bean。每個bean都有一個在頁面加載時調用的init方法。我想在這個方法上使用@PostConstruct。我唯一的問題是bean在bean上的方法被調用時被實例化。不幸的是,bean並不總是被調用,並且init方法會在會話作用域bean上填充數據。有一個鏈接頁面和bean的命名約定,所以我們可以使用一個監聽器根據請求實例化bean。另一種解決方案可能是將範圍更改爲viewscope(可能在websphere 8.5上很麻煩)。如何在頁面加載時實例化輔助bean
我想知道是否有什麼我可以做的PostConstruct工作?還有其他的選擇我錯過了嗎?
編輯: 我有一個PhaseListener來執行基本功能。它將請求的頁面與相應的bean相匹配(通過命名約定)。以下是用來實例化bean,但看起來有點難看。
expressionFactory.createValueExpression(elContext, "#{" + managedBeanName + "}", Object.class)
有沒有更好的方法來做到這一點?
哪個JSF 2.x版? WAS 8.5自己的MyFaces 2.0.x? – BalusC
優選地,改變實現將需要改變類加載器順序(父最後)。我不認爲這是我們的選擇。 – pjanssen
我沒問過。我問你正在使用哪個JSF 2.x版本。然後,我可以針對我的答案。實際上可能依靠JSF 2.x版本來使用。那麼,你再一次使用JSF 2.0,2.1或2.2嗎? – BalusC