2011-06-21 227 views
0

我開始一個新的JSF(2)項目。我意識到純JSF有一些限制,我打算在春天下降。 JSF是一個在春季比較新的方法(甚至沒有一個標籤彈出面臨在stackoverflow :-)),jsp是經典的方式。
我需要技術堆棧的最佳可用調整。
1)我是否也需要使用彈簧網頁流?
2)是否可以使用彈簧面(這似乎是Web流的一部分)+ spring mvc + JPA?
3)有沒有這種配置的好例子?沒有彈簧流動的彈簧面

回答

3

我使用JSF 2連同彈簧3依賴注入等

我不熟悉的Web流量,我不使用它。

在你的faces-config.xml你可以註冊春季SpringBeanFacesELResolver

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

然後,您可以在JSF代碼中訪問Spring受管Bean!

看看Spring documentationAPI docs

+0

所以你不使用彈簧面,但普通的jsf 2,沒有文件上傳,安全等。 – AgostinoX

+0

不,我們不使用彈簧面。 (我甚至不知道這是什麼...)我們也使用PrimeFaces,它有一個文件上傳組件:http://www.primefaces.org/showcase/ui/fileUploadHome.jsf。我們仍然處於項目的開始階段,所以我不能告訴你,我們將如何處理安全問題...... – Sebi

1

如果您在應用程序中沒有沉重的嚮導專用視圖,我懷疑您實際上需要使用SWF。

最簡單的解決方案實際上就是Sebi告訴你的 - 註冊Spring EL Resolver,並用適當的原型(最常見的是@Controller)和期望的範圍標記你的控制器類。從那裏開始,您應該能夠通過手動或自動裝配獲得對Spring管理的bean的引用。這就是它 - 沒有faces-config.xml豆類管理,也沒有「雙IoC」開銷。一旦它處於Spring環境中,託管控制器就可以通過#{} EL-notation輕鬆地從facelet中取消引用。

例如:

TestController.java:

@Controller("myController") 
@Scope("request") 

public class TestController { 

@Autowired 
private SomeSpringManagedBean someBean; 

private String someViewProperty; 

public String getSomeViewProperty() { 
     return someViewProperty; 
} 

public void setSomeViewProperty(String arg) { 
     this.someViewProperty = arg; 
} 

...... 

} 

TestView.jspx:

<p:inputText value="#{myController.someViewProperty}" /> 

我們失去了約2周試圖SWF與JSF 1.2一起扎 - 只是發現一旦我們真的得到它與支持JSF 1.2的最新版本的IceFaces一起工作,IceFaces就有一個令人討厭的功能/ bug,它不會呈現視圖並且已經有gott en在第五階段沒有拋出任何異常或報告任何有用的東西(這個問題在1.8.2-GA版本的IceFaces中得到修復,如果沒有購買許可證,這個問題就無法得到解決)。

編輯:我基本上注意到一個類似的SO線程here

+0

謝謝,非常有幫助。我可以綁定一個簡單的「bean」而不是@Controller嗎? – AgostinoX

+0

我不確定我是否理解這個問題 - 如果您需要從控制器訪問Spring管理的bean,則可以通過'@ Autowired'或其他任何首選方式(如我的答案中所示)執行此操作。如果您問是否可以從視圖訪問非託管類,我不這麼認爲,除非您的意思是混合使用JSF IoC和Spring容器 - 我無法想象爲什麼會這樣。無論如何,我會說通過控制器公開模型值的最佳方式是通過控制器,所以爲什麼你會從視圖中訪問非託管bean? – quantum