如何解决如何控制JSF Facelet文件的区分大小写
嗨,Stackoverflow社区,
我在Java11和JSF / Primefaces上使用Wildfly 16。
虽然在.xhtml源代码中使用include,但我注意到此构造中路径“ xyz / abc.xhtml”的大小写敏感度取决于操作系统:
<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,以便在两个OS上文件访问都区分大小写还是不区分大小写?
解决方法
解决方案
我认为解决此问题的最佳方法是仅使用小写字母命名每个文件,并且引用将转换为小写。
首先创建一个包含toLowerCase(String)
方法的类。
public final class Functions {
private Functions() {
// Hide constructor.
}
public static String toLowerCase(String s) {
return s.toLowerCase();
}
}
然后,您必须定义一个functions.taglib.xml
(functions
是如何命名的示例)。
<?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
中注册taglib。
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/functions.taglib.xml</param-value>
</context-param>
现在您可以使用它了:
<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?(功能定义的积分)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。