0
我嘗試使用Apache Commons Lang中3在我的JSF 2的應用程序,我跟着BalusC的example解析錯誤,而其中的taglib
但是當我包括在我.xhtml頁面此行:
<%@taglib prefix="f" uri="/WEB-INF/functions.tld" %>
解析頁面代碼時出現錯誤。
我該如何解決這個問題?
我嘗試使用Apache Commons Lang中3在我的JSF 2的應用程序,我跟着BalusC的example解析錯誤,而其中的taglib
但是當我包括在我.xhtml頁面此行:
<%@taglib prefix="f" uri="/WEB-INF/functions.tld" %>
解析頁面代碼時出現錯誤。
我該如何解決這個問題?
答案針對的是一個問題,它的提問者已知在JSP上使用JSF 1.x。您在那裏使用的語法特定於JSP,它是自JSF 2.0以來棄用的Facelets的傳統前身。
完全擺脫functions.tld
文件。聲明基於現有的靜態方法的自定義函數的正確JSF 2.x的Facelets的方法如下:
首先創建一個/WEB-INF/functions.taglib.xml
:
<?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>escapeJavaScript</function-name>
<function-class>org.apache.commons.lang.StringEscapeUtils</function-class>
<function-signature>java.lang.String escapeJavaScript(java.lang.String)</function-signature>
</function>
</facelet-taglib>
然後在/WEB-INF/web.xml
註冊它:
/META-INF
一個JAR文件是反過來的 <context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/functions.taglib.xml</param-value>
</context-param>
(即步驟是不必要放置在/WEB-INF/lib
)
最後聲明和按如下方式使用它:
<html ... xmlns:func="http://example.com/functions">
...
<h:outputScript>var foo = '#{func:escapeJavaScript(bean.foo)}';</h:outputScript>
請注意,我已經更新了你相應的找到了答案。另請注意,如果您使用的是JSF實用程序庫OmniFaces,則此功能已作爲#{of:escapeJS(bean.foo)}
提供。