我在这个答案中描述的ViewHandler中使用了JSF1.2:IceFaces会话到期导致异常非常有用,因为当异常发生时,页面会自动重新生成,这对公共页面很好。问题是它与JSF2.0不兼容。有没有人知道如何在JSF2.0或替换中工作呢?
编辑:
我已经找到了这个解决方案:无状态JSF,但我仍然怀疑是否有任何方法可以像我在JSF1.2中所做的那样,通过ViewHandler来完成它。以下是我的JSF2.0当前代码:
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)发布于 2011-11-08 03:04:32
我认为JSF2的方法是提供您自己的异常处理程序。
在异常处理程序中,可以循环所有未处理的异常,检查ViewExpiredException并删除它。
一个偶数填充请求参数并导航到特定的facelet,它可以呈现正确且信息丰富的页面,该页面利用从异常处理程序中填充的请求params。如果您愿意,甚至可以导航到登录屏幕。
下面是一个描述如何实现它的文章。
https://stackoverflow.com/questions/6697529
复制相似问题