首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF2.0 ViewExpiredException

JSF2.0 ViewExpiredException
EN

Stack Overflow用户
提问于 2011-07-14 17:36:07
回答 1查看 1.6K关注 0票数 2

我在这个答案中描述的ViewHandler中使用了JSF1.2:IceFaces会话到期导致异常非常有用,因为当异常发生时,页面会自动重新生成,这对公共页面很好。问题是它与JSF2.0不兼容。有没有人知道如何在JSF2.0或替换中工作呢?

编辑:

我已经找到了这个解决方案:无状态JSF,但我仍然怀疑是否有任何方法可以像我在JSF1.2中所做的那样,通过ViewHandler来完成它。以下是我的JSF2.0当前代码:

代码语言:javascript
复制
public class AutoRegeneratorViewHandler extends GlobalResourcesViewHandler
{
    public AutoRegeneratorViewHandler(ViewHandler viewHandler)
    {
        super(viewHandler);
    }

    @Override
    public UIViewRoot restoreView(FacesContext p_oContext, String p_sViewID)
    {
         UIViewRoot oViewRoot = super.restoreView(p_oContext,p_sViewID);

         try
         {
             if(oViewRoot == null)
             {          
                 initView(p_oContext);

                 oViewRoot = createView(p_oContext,p_sViewID);
                 p_oContext.setViewRoot(oViewRoot);

                 try
                 {
                     renderView(p_oContext,oViewRoot);
                 }
                 catch(IOException e)
                 {
                     e.printStackTrace();
                 }

                 System.out.println("Created : " + p_sViewID);
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return oViewRoot;
    }
}

这段代码去掉了ViewExpiredException,但是当页面被加载时,我似乎没有登录。

测试用例:

  • 打开网站
  • 等待时间超过当前会话到期时间(来自web.xml)
  • 输入用户名/密码
  • 按登录按钮
  • 页面重新加载,登录表单为空
  • 重新加载页面
  • 未显示页面显示欢迎和登录表单(预期行为)
EN

回答 1

Stack Overflow用户

发布于 2011-11-08 03:04:32

我认为JSF2的方法是提供您自己的异常处理程序。

在异常处理程序中,可以循环所有未处理的异常,检查ViewExpiredException并删除它。

一个偶数填充请求参数并导航到特定的facelet,它可以呈现正确且信息丰富的页面,该页面利用从异常处理程序中填充的请求params。如果您愿意,甚至可以导航到登录屏幕。

下面是一个描述如何实现它的文章

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6697529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档