【发布时间】:2011-10-05 13:36:46
【问题描述】:
我一直在将 JSF 1.2 与此答案中描述的 ViewHandler 一起使用:IceFaces Session Expiry causes an exception 它非常有用,因为当异常发生时,页面会自动重新生成,这对公共页面很有用。问题是它与 JSF 2.0 不兼容。有人知道如何让它在 JSF 2.0 或替代品中工作吗?
编辑:
我找到了这个解决方案:Stateless JSF,但仍然想知道是否有任何方法可以通过 ViewHandler 来解决,就像我在 JSF 1.2 中所做的那样。这是我的 JSF 2.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) - 输入用户名/密码
- 点击登录按钮
- 在登录表单为空的情况下重新加载页面
- 重新加载页面
- 页面显示欢迎和登录表单未显示(预期行为)
【问题讨论】:
-
为什么不能将应用程序迁移到 JSF 2.0? stackoverflow.com/questions/4441713/…
-
我已经迁移到 JSF 2.0 但我在 1.2 中的解决方案不再起作用了!
标签: jsf-2 richfaces viewexpiredexception