我一直在使用JSF 1.2用的ViewHandler在这个答案说明:IceFaces Session Expiry causes an exception这是非常有用的,因为当异常发生时页面会自动再生,有利于促进公共页面。问题是它与JSF 2.0不兼容。有没有人有一个想法如何使它在JSF 2.0或更换工作?JSF 2.0 ViewExpiredException
编辑:
我发现这个解决方案: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
) - 输入用户名/密码,
- 命中登录按钮
- 页面重载用登录表单为空
- 重新载入页面
- Page show欢迎和登录表单未显示(预期行为)
为什么不能迁移到JSF 2.0应用程序? http://stackoverflow.com/questions/4441713/migrating-from-jsf-1-2-to-jsf-2-0 – sfrj
我已经迁移到JSF 2.0,但我在1.2的解决方案不工作了! –