私は2日間で問題が発生しましたが、私はこの問題を解決できません。JSF ManagedBean - 注入されたプロパティが正しく動作しないSTATE_SAVING_METHOD =クライアント
私が抱えている問題は、デシリアライゼーション後にMangedBeanプロパティを使用していることです(私は推測します)。
プロパティ(purchaseManager)はSpringで設定され、MyBatisをデータマッパーとして拡張してDBと対話するDAOを使用します。
実際、ページへの最初のアクセスでは、init()メソッド内のpurchaseManager.getAll()が正常に動作します。
ボタンからアクションとしてrefreshList()を呼び出そうとすると、DAO内のgetSqlSession()でNullPointerExceptionが発生します。
@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>
私は、サーバーへのSTATE_SAVING_METHODを変更すると、アプリケーションが正常に動作しますが、私が欲しいものではありません。状況は以下の通りであるだけで、関連するコードをまかせ
。もし私がManageBeanをRequestScopeとして作るのと同じことですが、これも私の必要条件にペナルティを与えます。
ご協力いただきありがとうございます。 Ermal
私は春をしないので、私は完全に間違っているかもしれないが、なぜあなたは管理対象Bean春を注入しようとしていますJSF管理プロパティとして私はこれを見たことがない。 Springには独自のアノテーションがあります。 – BalusC
Springインフラストラクチャでは、フロントエンドと管理ツールの2つのWebアプリケーションで使用される独自のプロジェクトBLであるロジック(DAOとサービス)があります。多くの参考文献は、ManagedBeansを他のマネージドBeanのプロパティとしてインジェクトする方法を示しています。ここでは例を示します:http://www.mkyong.com/jsf2/injecting-managed-beans-in-jsf-2-0/ – Ermal
はい、私はJSFマネージドBeanの注入方法を知っていますが、Spring管理対象JSFマネージドBeanとしてのBean。それがEJB(Springが代わるもの)であれば、基本的に完全直列化可能なプロキシインスタンスを挿入する '@ManagedProperty'の代わりに' @ EJB'を使用していました。春には本当にそのための注釈がありませんか? '@ Autowired'かそれとも? – BalusC