首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何控制JSF Facelet文件的大小写敏感性

问如何控制JSF Facelet文件的大小写敏感性
EN

Stack Overflow用户
提问于 2020-10-31 00:58:57
回答 1查看 90关注 0票数 1

在Stackoverflow社区,

我在带有JSF/Primefaces的Java11上使用Wildfly 16。

在.xhtml源代码中使用includes时,我注意到此构造中路径"xyz/abc.xhtml“的大小写敏感性取决于操作系统:

代码语言:javascript
复制
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:include src="xyz/abc.xhtml"/>

这意味着,如果文件名为Abc.xhtml,这将在Windows上工作,但在文件系统区分大小写的Linux上不起作用。

现在我想保证在Windows和Linux上也有同样的表现。

是否可以配置JSF,使文件访问在两个操作系统上要么区分大小写,要么不区分大小写?

EN

回答 1

Stack Overflow用户

发布于 2020-10-31 02:22:08

解决方案

我认为解决这个问题的最好方法是只用小写字母命名每个文件,而引用将转换为小写。

首先创建一个包含toLowerCase(String)方法的类。

代码语言:javascript
复制
public final class Functions {

    private Functions() {
        // Hide constructor.
    }

    public static String toLowerCase(String s) {
        return s.toLowerCase();
    }
}

然后你必须定义一个functions.taglib.xml (functions就是一个如何命名的例子)。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
    version="2.0">
    <namespace>http://example.com/functions</namespace>

    <function>
        <function-name>contains</function-name>
        <function-class>com.example.Functions</function-class>
        <function-signature>boolean contains(java.util.Collection, java.lang.Object)</function-signature>
    </function>
</facelet-taglib>

最后一步是在web.xml中注册标记库。

代码语言:javascript
复制
<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/functions.taglib.xml</param-value>
</context-param>

现在,您可以使用它了:

代码语言:javascript
复制
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:fn="http://example.com/functions">

    <ui:include src="fn:toLowerCase('xyz/Abc.xhtml')}"/>
</html>

解释

基本上,这个示例会将源引用转换为小写。只有当你的文件都以小写字符命名时,这才能起作用。

如果定义自定义标记库对您来说太耗时,您还可以使用@ApplicationScoped bean并在其中添加方法(请参见Utility methods in application scoped bean)

当然,文件名的第一个字母大写也适用于小写的文件名。您只需使用capitalize()方法(我可以根据请求添加该方法,也可以查看How to capitalize the first letter of a String in Java?)。

可能还有其他方法,但它们将比这困难得多。

另请参阅

How to create a custom EL function to invoke a static method? (函数定义的信用)

Why are files case (in)sensitive on Linux and Windows?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64612710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档