gpt4 book ai didi

jsf - 将 JSF 1.1 与 Ajax4jsf 1.x 迁移到 JSF 2

转载 作者:行者123 更新时间:2023-12-01 23:00:45 25 4
gpt4 key购买 nike

我们正在将 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)

看起来 ajax4jsf.jar 与 JSF 2 不兼容。LifeCycle 配置看起来有些问题。

有什么方法可以让 a4j 与 JSF 2 JSP 一起工作吗?我知道当我们使用 XHTML 时,我们不需要这一切。

最佳答案

完全摆脱 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放入 View 范围中@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> :只需使用标准 <h:commandScript> 。然而它是在 JSF 2.3 后期引入的。如果您无法升级到 JSF 2.3,请考虑 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 可以更轻松地用单个模板替换所有重复的代码。以下答案适用:

关于jsf - 将 JSF 1.1 与 Ajax4jsf 1.x 迁移到 JSF 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com