我從兩天就陷入了一個問題,我無法擺脫這個困境。JSF ManagedBean - 注入的屬性在STATE_SAVING_METHOD = client上不能正常工作
我遇到的問題是使用反序列化後的MangedBean屬性(我猜)。
屬性(purchaseManager)使用Spring進行設置,並使用擴展MyBatis作爲數據映射器的DAO與數據庫進行交互。
事實上,在第一次訪問頁面時,init()方法內的purchaseManager.getAll()工作正常。
當我嘗試從一個按鈕調用refreshList()作爲一個動作時,我在DAO中的getSqlSession()上有一個NullPointerException。
讓只有相關的代碼的情況如下:如果我改變STATE_SAVING_METHOD到服務器的應用程序工作正常,但不是我想要的
@ManagedBean(name = "purchaseController")
@ViewScoped
public class PurchaseController implements Serializable{
@ManagedProperty(value = "#{purchaseManager}")
private PurchaseManager purchaseManager;
@PostConstruct
public void init(){
purchaseManager.getAll();
}
public void refreshList(){
purchaseManager.getAll();
}
}
public class PurchaseManagerImpl implements PurchaseManager, Serializable {
PurchaseDAO purchaseDAO;
public void getAll() {
purchaseDAO.getAll()
}
}
public class PurchaseDAOImpl extends SqlSessionDaoSupport implements PurchaseDAO, Serializable {
public void getAll() {
SqlSession session = getSqlSession(); // when the call comes from refreshList(), session is null
session.selectList("PAYMENT.getAll", null);
}
}
in web.xml
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
。如果我將ManageBean設置爲RequestScope,但同樣也會懲罰我的需求。
預先感謝任何人提供任何形式的幫助! Ermal
我不做春天,所以我可能是完全錯誤的,但爲什麼你試圖注入一個Spring管理的bean作爲JSF管理的屬性?我從來沒有見過這個。 Spring對此有自己的註釋。 – BalusC 2012-04-03 02:57:48
在Spring基礎結構中,我有邏輯(DAO和服務),它是兩個其他Web應用程序Front-End和Admin-Tool使用的自己的項目BL。很多參考資料都顯示了將ManagedBeans注入爲其他託管bean的屬性的方式。這裏有一個例子:http://www.mkyong.com/jsf2/injecting-managed-beans-in-jsf-2-0/ – Ermal 2012-04-03 03:31:34
是的,我知道如何注入JSF託管的bean的工作,但你正在治療一個Spring管理bean作爲JSF管理的bean。如果它是一個EJB(Spring應該取而代之),那麼你應該使用'@ EJB'而不是'@ ManagedProperty',它將基本上注入一個完全可序列化的代理實例。 Spring是否真的沒有一些註解? '@ Autowired'左右嗎? – BalusC 2012-04-03 10:42:43