我们正在将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找不到支持标记