2

我已经尝试了几十个谷歌搜索中的每一个解决方案:getRequestMap、ElResolver、evaluateExpressionGet 等等。没有,绝对没有,工作。我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 回答