是否可以包含 JSF 中一个文件夹中的所有 javascript 文件?

2024-06-22

我正在使用 JSF 2.0,并且正在寻找一种方法来包含页面上给定文件夹中的所有 javascript,即执行类似的操作

<h:outputScript library="javascript" name="*.js" target="head" />

这种事情可能吗?我应该使用 java 代码编写自定义组件来实现此目的吗?

感谢您的帮助,
塞巴斯蒂安·特朗普


好主意。 JSF API 不支持此功能,但理论上可以通过自定义脚本渲染器实现。我对此进行了一些尝试,这确实是可能的。只需创建一个MultiScriptRenderer which extends ScriptRenderer并覆盖encodeEnd() http://download.oracle.com/javaee/6/api/javax/faces/render/Renderer.html#encodeEnd%28javax.faces.context.FacesContext,%20javax.faces.component.UIComponent%29检查是否name属性包含*通配符,然后通过扫描资源文件夹中匹配此模式的文件进行相应处理。

这是一个启动示例:

package com.example;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import com.sun.faces.renderkit.html_basic.ScriptRenderer;

public class MultiScriptRenderer extends ScriptRenderer {

    @Override
    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
        Map<String, Object> attributes = component.getAttributes();
        String name = (String) attributes.get("name");
        if (name.contains("*")) {
            String pattern = name.replace(".", "\\.").replace("*", ".*");
            String library = (String) attributes.get("library");
            File root = new File(context.getExternalContext().getRealPath("/resources/" + (library != null ? library : "")));
            for (File file : root.listFiles()) {
                if (file.getName().matches(pattern)) {
                    attributes.put("name", file.getName());
                    super.encodeEnd(context, component);
                }
            }
            attributes.put("name", name); // Put original name back. You never know.
        } else {
            super.encodeEnd(context, component);
        }
    }
}

将其注册在faces-config.xml如下(Sorry, @FacesRenderer http://download.oracle.com/javaee/6/api/javax/faces/render/FacesRenderer.html在 JSF 2.2 中针对这个特定的极端情况修复注释之前,注释不会起作用,另请参阅JSF 问题 1748 http://java.net/jira/browse/JAVASERVERFACES-1748):

<render-kit>
    <renderer>
        <component-family>javax.faces.Output</component-family>
        <renderer-type>javax.faces.resource.Script</renderer-type>
        <renderer-class>com.example.MultiScriptRenderer</renderer-class>
    </renderer>
</render-kit>

在 Mojarra 2.0.3 上运行良好。您可以使用类似的模式*.js and prefix*.js。特定的代码示例仅与特定的 JSF 实现紧密耦合,以节省代码样板。它还要求在部署时扩展 WAR,否则通过以下方式浏览目录File#listFiles()不可能(因此排除某些(较旧的)servletcontainer 版本/配置)。对于其他 JSF 实现,您必须扩展其ScriptRenderer相反,或者如果您想独立于实现,则编写一个全新的(这应该很简单,只需查看标准ScriptRenderer来源(如果你卡住了)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以包含 JSF 中一个文件夹中的所有 javascript 文件? 的相关文章

随机推荐

  • 如何在 Chrome 开发工具中访问 js 文件/lib 时设置断点?

    是否有可能调试时设置断点 以便每次访问某个类时停止 否则运行正常 这是非常常见的用例 当人们不想停止在 jquery 函数或其他常见的库函数上 而是希望停留在特定的 js 文件上 但不知道什么可能会引发错误 所以人们不这样做不想在 js 文
  • 将 Git 子存储库添加到 Mercurial

    我一直在尝试使用 bitbucket 设置一个项目 该项目的项目依赖项托管在 github 上 使用 Hg Git Mercurial 插件我几乎可以做到这一点 但到了推动的时候 事情就变得麻烦了 的文档Mercurial 子存 储库 ht
  • 如何同时将样式应用于多个类?

    我希望两个具有不同名称的类在 CSS 中具有相同的属性 我不想重复代码 abc margin left 20px xyz margin left 20px a class abc Lorem a a class xyz Ipsum a 由于
  • PHP 导出到 Excel

    我遇到了无法将日语文本导出到 Excel xls 的问题 我使用了以下代码 header Content type application ms excel charset UTF 8 header Content Disposition
  • 更新现有 Rdata 文件

    我发现自己需要更新先前使用创建的 Rdata 文件中的一两个数据对象save 如果我不小心加载文件 我可能会忘记重新保存文件中的某些对象 举个例子 我正在开发一个包 其中一些对象存储在sysdata rda 查找供内部使用的表 我不想导出
  • 字节序转换和 g++ 警告

    我有以下 C 代码 template
  • JQuery jQGrid 展开/折叠标题层上的网格单击

    有没有什么方法可以通过单击标题图层来展开 折叠网格 我有 3 个非常大的表格 显示在 1680x1050 屏幕上 默认加载 折叠 每次用户想要展开 折叠表格时 他必须单击标题层的展开 折叠按钮 这处于 非常远 的位置 您可以使用类似的构造
  • 将 Mongo 集合转储为 JSON 格式

    有没有办法将 mongo 集合转储为 json 格式 无论是在 shell 上还是使用 java 驱动程序 我正在寻找性能最好的一个 Mongo 包含一个 mongoexport 实用程序 参见文档 https docs mongodb c
  • Lisp reader 输入中的关键字有危险吗?

    在 Doug Hoyte 的 Let Over Lambda 的第 102 页上 作者这样描述他的安全读取字符串函数 这意味着向量 位向量 gensym 循环引用 和所有其他的都被淘汰了 安全读取字符串甚至不允许关键字或外国包符号 我绞尽脑
  • Google 应用内结算区分用户帐户

    我正在开发一个包含应用内计费非消耗产品 终身订阅 的应用程序 用户的设备上有一封与 Play 商店关联的电子邮件 设想 用户 A 使用以下命令创建新帐户 电子邮件受保护 cdn cgi l email protection并购买终身订阅和注
  • 包含一些 F[_] 的元组/hlist 上的通用变换/折叠/映射

    我最近问映射并减少 折叠 scalaz Validation 的 HList https stackoverflow com questions 26410100 并得到了关于如何转换固定大小的元组的一个很好的答案Va T 这是一个别名sc
  • CMake:运行链接命令时出错:%1 不是有效的 Win32 应用程序

    我正在尝试使用 CMake 在 64 位 Windows 8 1 上构建 NaCl 扩展 相同的代码在 Ubuntu 上运行没有任何问题 一切顺利 直到 CMake 尝试与此命令链接 cmake E cmake link script li
  • AWS DynamoDB 限制写入请求处理

    我有一个在指定时间限制写入请求的表 我想更多地了解 AWS SDK 如何处理它们 根据我目前的理解 DynamoDB 将向我的 Lambda 返回错误 这就是为什么我会在 DynamoDB 表指标中出现用户错误 但是 AWS SDK 具有错
  • 连接同一个表中的两个选择查询

    该表包含 ID 列 valueHeading 列和值列 我想将值列分成两个新列 分别称为 valueHeading1 和 valueHeading2 具体取决于值具有的 valueHeading 类型 所以我想加入这个选择 编辑 完全加入
  • 大 Iconfont 图标在右侧被切断

    我正在使用我的客户在网络应用程序的索引页上作为标题徽标提供的图标字体中的大图标 该徽标的宽度为设备宽度的 60 由一个大圆形徽标 约占图标的 40 和下方的文本组成 在纵向模式下 徽标宽度为设备宽度的 60 我得到了带有文本的徽标作为一个矢
  • 如何使用 shell 命令的结果初始化 CMake 变量

    有没有办法将 CMake 脚本中的变量设置为 shell 命令的输出 就像是SET FOO COMMAND echo bar 会想到 你想要的execute process https cmake org cmake help latest
  • iPhone 阻止键盘横向旋转

    因此 我在 MPMoviePlayerController 上放置了一些控件 并且我打算将其用于纵向模式 只需使用垂直拍摄的视频即可 我唯一的问题是 对于文本输入 键盘是横向显示的 现在 我意识到有一种未记录的方法来设置播放器的方向 但我不
  • 删除可能不存在的文件的最Pythonic方法

    我想删除文件filename如果存在的话 这么说合适吗 if os path exists filename os remove filename 有没有更好的办法 一种单行方式 更Pythonic的方式是 try os remove fi
  • Autoscaling launchconfig 组中的 aws cloudformation“NetworkInterfaces”

    在 aws cloudformation 中 如何在 Autoscaling launchconfig 组中添加 NetworkInterfaces 因为我想配置启动的每个实例 并且需要 NetworkInterfaces 位于相同的 AW
  • 是否可以包含 JSF 中一个文件夹中的所有 javascript 文件?

    我正在使用 JSF 2 0 并且正在寻找一种方法来包含页面上给定文件夹中的所有 javascript 即执行类似的操作