Richfaces a4j:loadScript 清除 ajax 调用上的 jQuery 插件

2024-06-19

我正在加载嵌入到 RichFaces 中的 jQuery:

<a4j:loadScript src="resource://jquery.js"/>

接下来,我将使用以下命令加载 FancyBox jQuery 插件:

<script type="text/javascript" src="/App/fancybox/jquery.fancybox-1.3.4.pack.js"/>

该插件在页面首次加载时工作正常,但是在执行 ajax 调用后

<a4j:jsFunction name="myMethod" data="#{myController.jsonDataToReturn}" action="#{myController.doSomething()}" oncomplete="populateData(data);">     
  <a4j:actionparam name="selectedTag" assignTo="#{myController.selectedTag}"/>
</a4j:jsFunction>

该插件停止工作。测试表明a4j:loadScript标签在每次 ajax 调用时都会重新加载,从而重新加载 jQuery 变量,从而丢失附加的插件。

当前的解决方法是通过放置一个来加载 jQuery<rich:jQuery query="fn" />标记页面中的某个位置。除了强制加载 jQuery 之外,它什么也不做,但因为它不使用 a4j,所以在 ajax 调用时不会重新加载 jQuery。

不过,有一个干净的解决方案吗?我正在使用 RichFaces 3.3.3,其中包括 jQuery 1.3.2。

Update:

FancyBox 加载有:

jQuery(document).ready( function(){
    jQuery('.fancyboxLink').live('click',aclick);
});

function aclick(){
    jQuery.fancybox({
        href: '#{facesContext.externalContext.requestContextPath}/webpage.xhtml',
            type:'iframe',
            width:710,
            height:510,
            padding:0,
            margin:0,
            hideOnOverlayClick:false,
            overlayColor:'#000'
    });
    return false;
}

第一次 ajax 调用后,jQuery 不再包含 fancybox。


您需要的第一件事是在每个 ajax 请求上加载脚本,使用a4j:loadScript为了那个原因。

<a4j:loadScript src="/App/fancybox/jquery.fancybox-1.3.4.pack.js"/>

第二:在重新渲染组件时执行 fancybox 脚本(ajax 调用,重新渲染包含带有 fancybox 元素的 dom 树的一部分)。我将通过编写自定义 Facelets 组件来做到这一点,如下所示。

fancyInput.xhtml:

<ui:component xmlns="http://www.w3.org/1999/xhtml"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:c="http://java.sun.com/jstl/core">

    <a4j:loadScript src="resource:///App/fancybox/jquery.fancybox-1.3.4.pack.js"/>

    <!-- id is passed by component's client as facelet param. -->
    <h:commandButton id="#{id}" otherParameters="....."/>
    <script type="text/javascript">
        jQuery(function() {
            // Attaching fancybox to rendered component.
            jQuery($('#{rich:clientId(id)}')).live('click',aclick);
        });
    </script>
</ui:component>

您的页面:

<ui:include src="fancyInput.xhtml">
    <ui:param name="id" value="anId"/>
    <ui:param name="otherParams" value="..."/>
</ui:include>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Richfaces a4j:loadScript 清除 ajax 调用上的 jQuery 插件 的相关文章

随机推荐

  • 带有 nx 测试的 Angular v13 Jest - SyntaxError:无法在 Runtime.createScriptFromCode 的模块外部使用 import 语句

    我尝试用可能的解决方案来关注每条评论here https github com nrwl nx issues 7844至此 我还依赖 github 上的一个示例项目 它运行得很好 在手动更新所有内容之后 这也开始发生在我身上 并且在运行 n
  • 覆盖 Sinatra 默认的 NotFound 错误页面

    有没有办法覆盖 sinatra 默认的 NotFound 错误页面 Sinatra 不知道这个小曲 我希望 sinatra 在未找到正确的路由时仅将纯字符串显示为 未找到方法 但是当我从路由内部引发 404 错误时 我希望它显示传入的错误消
  • FontAwesome 与 PrimeFaces

    我一直渴望在 Primefaces 中包含 FontAwesome 图标 最后 Optimus 昨天发布了这个伟大的新图标 gt http blog primefaces org p 3004 comment 5422 http blog
  • JavaScript for...in 与 for

    您认为 for in 和 for 循环有很大区别吗 您更喜欢使用哪种 for 为什么 假设我们有一个关联数组的数组 var myArray key value key value1 所以我们可以迭代 for var i 0 i lt myA
  • 如何使用 pdf.js 从客户端设置范围标头?

    我对客户端编程很陌生 我正在尝试使用 pdf js 在我的网站上查看我的 pdf 通过遵循文档中的步骤 我尝试使用 pdf js 加载 pdf 整个 pdf 文件通过单个请求下载 现在 我想做渐进式加载 通过指定范围下载 我在客户端和服务器
  • 对于模板上的非活动用户,user.is_authenticated 始终返回 False

    在我的模板中 login html 我有 if form errors if user is authenticated div class alert alert warning div
  • Jhipster 生成器跳过 --skip-server 处的身份验证代码

    为什么当我们使用 skip server 生成项目时 哟 jhipster skip server 部分身份验证丢失 在 AJS A2 上 是吗 每次我需要粘贴部分代码 Angular 上的 AuthServerProvider 或 Ang
  • UITableView 最后一个单元格被 UITabBarController 隐藏

    我面临一个奇怪的问题 我有一个UITableView在最初的UIViewController of the UITabBarController 起初一切都很好 但是当我更改选项卡并返回到第一个选项卡时 最后一个单元格UITableView
  • Java RSA 加密

    我正在尝试来回编码一个简单的字符串 测试 public static String encode Key publicKey String data throws NoSuchAlgorithmException NoSuchPadding
  • 如何将java项目转换为Maven项目或类似项目

    我目前正在创建一个应用程序 用于一次性编译多个 java 项目以进行编程作业 由于提交 java 项目的方式有很多种 例如 作为 eclipse 项目 作为 netbeans 项目 作为 jar 文件 是否有一个类似的插件 您可以轻松地在项
  • markdown/pandoc 的全站编译? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 With Sphinx doc http sphinx doc org 您可以创建一堆 ReStruct
  • 如何让 Entity Framework 6 + Sqlite + 代码优先工作?

    我正在尝试创建一个简单的项目来探索 Entity Framework 6 Code First 与 sqlite db 提供程序如何工作 但是当我完成我的应用程序时 我收到错误 实体框架提供程序类型 System Data SQLite S
  • 了解 PDFBox 2.0 中字体的加载

    我终于成功地让 PDFBox 打印我的 unicodes 但现在 我想了解我提出的解决方案 下面的代码可以工作并打印一个 到页面 有两件事不起作用 改变PDType0Font load documentMock systemResource
  • 居中时仅在文本的最后一行下划线

    我只想在某些文本的最后一行下划线 当文本换行到更多行时 仍然只有最后一行需要加下划线 我找到了这个解决方案 https stackoverflow com questions 15180827 advanced css challenge
  • 获取函数内的 kwargs

    如果我有一个像这样的 python 函数 def some func arg1 arg2 arg3 1 arg4 2 有没有办法确定哪些参数是从函数内部通过关键字传递的 EDIT 对于那些问我为什么需要这个的人 我没有真正的理由 它是在一次
  • 包含内容的 WPF 新窗口

    我想在现有的主 Windwoe 旁边创建一个带有可滚动文本框的新窗口 我在主窗口中按下 打开新窗口 按钮 然后它应该打开一个带有可滚动文本框的新窗口 inside form2 在 WPF 中 您可以在主窗口中拖放元素 但不能在新窗口中执行此
  • PostgreSQL 中的 Long 数据类型相当于什么?

    我想知道相当于什么LongPostgreSQL 中的数据类型 根据the docs http www postgresql org docs 7 4 interactive datatype html DATATYPE INT看起来像big
  • JSF 2 和发布/重定向/获取?

    如果我错了 请纠正我 但我认为我所有的非 AJAX 提交都应该使用 Post Redirect Get PRG 方式 因为 GET 应该用于刷新 查询数据 就我而言 我能想到的应用程序页面实际上只对数据进行更新 然后刷新页面 所以我认为 P
  • 在 python 中使用 IOT 适配器和 google pub/sub api 将 MQTT 与 GCP 集成

    与 App Engine Standard 中的 Cloud Pub Sub API 集成 我正在标准 Python 环境中开发 Google 应用程序引擎应用程序 对于代码的某些部分 我需要与 Google Cloud pub sub A
  • Richfaces a4j:loadScript 清除 ajax 调用上的 jQuery 插件

    我正在加载嵌入到 RichFaces 中的 jQuery