2

getRequestMap、ElResolver、evaluateExpressionGetなど、数十のGoogle検索からすべてのソリューションを試しました。何も、まったく何も機能しません。null毎回届きます。関連するコードは次のとおりです。

    @ManagedBean(name="readerBean")
    @ViewScoped
    public class ReaderBean implements Serializable {...

そして、PhaseListener で:

     public void beforePhase(PhaseEvent event) {

    if (event.getPhaseId() == PhaseId.RESTORE_VIEW) {

            ReaderBean r = null; //The Managed Bean
            try {
                FacesContext fctx = FacesContext.getCurrentInstance();
                r=(ReaderBean) fctx.getExternalContext().getRequestMap().get("readerBean");
                r=(ReaderBean) fctx.getELContext().getELResolver().getValue(fctx.getELContext(), null, "readerBean");
                r=(ReaderBean) fctx.getApplication().getExpressionFactory().createValueExpression(fctx.getELContext(), "#{readerBean}", ReaderBean.class).getValue(fctx.getELContext());
                r=(ReaderBean) fctx.getApplication().evaluateExpressionGet(fctx, "#{readerBean}", ReaderBean.class);

何も機能しません!!!

4

1 に答える 1

2

リクエスト マップ アプローチに関しては、ビュー スコープの Bean がリクエスト スコープに格納されていないため、失敗します。代わりに、ビュー スコープに格納されます。他のアプローチに関しては、ビュー スコープ Bean がビューに格納され、ビューが復元された後にのみ使用可能になるため、それらは失敗します。ただし、ビューが復元される前に取得しようとしています。これは鶏卵問題です。

アプローチを修正する必要があります。おそらく、Bean はリクエストスコープのものである必要がありますか? おそらく、ロジックを別のフェーズで実行する必要がありますか? おそらく、代わりに Bean 自体でロジックを実行する必要がありますか? 等。

これが正しい解決策であるとあなたが考えた具体的な機能要件が質問に記載されていないため、正しい方向に向けることはできません。

于 2012-10-05T13:06:37.123 に答える