Pha*_*mar 6 jsf richfaces myfaces ajax4jsf jsf-2
我们正在将JSF 1.1(MyFaces)项目迁移到JSF 2.我们的想法是通过将JSP和XHTML保持在一起一段时间来定期迁移.我们在JSP页面中使用了许多ajax4jsf-1.1.1标记.我们不使用RichFaces.将系统配置为JSF 2(Balusc教程中提到的所有配置更改)当尝试在类路径中使用ajax4jsf.jar访问JSP页面时,我们得到一个异常:
Caused by: java.lang.IllegalStateException: setViewHandler may not be executed after a lifecycle request has been completed
at org.apache.myfaces.application.ApplicationImpl.setViewHandler(ApplicationImpl.java:853)
at org.ajax4jsf.framework.ajax.InitPhaseListener.beforePhase(InitPhaseListener.java:92)
at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefore(PhaseListenerManager.java:76)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:131)
Run Code Online (Sandbox Code Playgroud)
它看起来ajax4jsf.jar与JSF 2不兼容.看起来LifeCycle配置存在一些问题.
有没有什么办法可以让a4j与JSF 2 JSP一起工作?我知道当我们使用XHTML时,我们不需要这一切.
Bal*_*usC 13
完全摆脱Ajax4jsf 1.x. 它确实与JSF2不兼容.相反,JSF2提供了一个新的主要ajax标记<f:ajax>,它涵盖了Ajax4jsf 1.x之前提供的所有核心功能.
如果升级到RichFaces 4不是一个选项(因为,正如你自己所说,你没有在任何地方使用RichFaces组件),那么只需删除Ajax4jsf 1.x并用<a4j:xxx>标准的JSF2等价替换所有标签.
<a4j:ajaxListener>:使用<f:ajax listener>.<a4j:keepAlive>:只需将托管bean放在视图范围内@ViewScoped.<a4j:log>:使用jsf.ajax.addOnEvent()或jsf.ajax.addOnError()在JS上下文中.<a4j:commandLink>:只是窝<f:ajax>在里面<h:commandLink>.<a4j:outputPanel>:使用<h:panelGroup>并记住包括在其ID <f:ajax render>或PrimeFaces<p:outputPanel>.<a4j:repeat>:只需使用标准<ui:repeat>.<a4j:form>:只是使用<h:form>,它会自动识别<f:ajax>.<a4j:htmlCommandLink>:只是窝<f:ajax>在里面<h:commandLink>.<a4j:jsFunction>:没有替代品.考虑OmniFaces<o:commandScript>或PrimeFaces<p:remoteCommand>.<a4j:region>:只需使用<f:ajax execute>,你甚至可以包裹一组组<f:ajax>件.<a4j:loadBundle>:只需使用标准<f:loadBundle>.<a4j:status>:使用jsf.ajax.addOnEvent()或jsf.ajax.addOnError()在JS上下文中.<a4j:actionparam>:只需使用标准<f:param>.<a4j:loadScript>:只需使用标准<h:outputScript>.<a4j:mediaOutput>:没有替代品.考虑PrimeFaces<p:media>.<a4j:poll>:没有替代品.考虑OmniFaces<o:commandScript>或PrimeFaces<p:poll>.<a4j:commandButton>:只是窝<f:ajax>在里面<h:commandButton>.<a4j:include>:只需使用标准<ui:include>.<a4j:loadStyle>:只需使用标准<h:outputStylesheet>.<a4j:support>:只需使用标准<f:ajax>.您还需要将JSP文件重命名/重写为Facelets文件.在简单的情况下,这通常只是更改根声明和文件扩展名的问题.Facelets可以更轻松地通过单个模板替换所有重复的代码.以下答案适用:
| 归档时间: |
|
| 查看次数: |
4531 次 |
| 最近记录: |