JSF 1.2- >2.0 :用于保存视图状态的 viewId 参数为空



我们正在将JSF 1.2项目迁移到JSF 2.0,并使用JSP页面中的命令按钮。单击命令按钮可以从外部系统获得响应并显示响应。

当点击这个命令按钮时,我们会得到一个空白页面,下面是执行

在调试过程中,我发现我们得到了成功的响应,但无法找到原始页面,因为它丢失了状态视图ID

[8/13/13 11:01:30:538 CDT] 000000e0 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[Faces Servlet]: java.lang.NullPointerException: viewId parameter for  save view state is null
    at org.ajax4jsf.application.AjaxStateHolder.saveState(AjaxStateHolder.java:155)
    at org.ajax4jsf.application.AjaxStateManager.saveStateInSession(AjaxStateManager.java:523)
    at org.ajax4jsf.application.AjaxStateManager.buildViewState(AjaxStateManager.java:503)
    at org.ajax4jsf.application.AjaxStateManager.saveView(AjaxStateManager.java:462)
    at org.apache.myfaces.shared_impl.view.JspViewDeclarationLanguageBase.renderView(JspViewDeclarationLanguageBase.java:206)
    at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:263)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
    at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:169)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)

web.xml中是否需要任何特定的配置来保存视图状态?

stacktrace中特定于Ajax4jsf 1.x的org.ajax4jsf.*类的存在告诉您仍在为JSF1.x使用Ajax4jsf。

这与JSF 2.x不兼容。您必须删除web.xml中所有与Ajax4jsf 1.x相关的JAR文件和注册。您需要使用JSF自己的<f:ajax>功能,或者升级到RichFaces4.x,后者捆绑了一个更新的、与JSF 2.0兼容的<a4j:xxx>标签版本。请注意,这反过来需要Facelets而不是JSP。因此,您还必须从JSP迁移到Facelets。

另请参阅:

  • 将带有Ajax4jsf1.x的JSF 1.1迁移到JSF 2
  • 从JSF 1.2迁移到JSF 2.0
  • a4j:使用JSF 2找不到支持标记

最新更新