我嘗試了使用JSF 2的聯合Spring 3(MVC)。我在Spring和JSF中有一些經驗,但從未嘗試過加入它們。最後,我有2個文件在JSF請求期間,@ManagedBean @Component類中的自動服務爲null
@ManagedBean(name = "userBean")
@Scope
@Component
public class someBean {
@Autowired
private TestService testService;
public void printString() {
System.out.println(testService.getString());
}
}
和
@ManagedBean(name = "studentBean")
@Scope
@Component
public class StudentBean {
@Autowired
private TestService testService;
public void printString() {
System.out.println(testService.getString());
}
}
對於這些文件,我有春天,JSF和web.xml正確的配置。並在.xhtml頁面中爲'someBean'和'StudentBean'啓動printString()。第一種情況下我有NPE,第二種情況下控制檯中有'一些字符串'。 原因很簡單 - Spring上下文和JSF中的不同bean名稱。後
@Component => @Component("userBean")
public class someBean {
完成了所有的問題在我看到
private TestService testService;
@Autowired
public void setTestService(TestService testservice) {
this.testService = testService;
}
當JSF的bean創建TestService的設置不爲空調試,但JSF生命週期時
public void pringString() {
testService.blah();
}
TestService的期間爲空一片空白。這是我無法理解的。有人深入瞭解Spring和JSF來詳細描述這種情況嗎?
除此之外,對於這個問題的解決方案是驗證管理的bean必須使用'import javax.annotation.ManagedBean'而不是'導入將bean從「faces managed bean」(CDI)轉換爲「Spring managed bean」(ApplicationContext)的javax.faces.bean.ManagedBean'(導入可以使用@ManagedBean表示法) – Kurapika 2017-11-22 15:20:01