2013-08-30 74 views
0

我嘗試使用Apache Commons Lang中3在我的JSF 2的應用程序,我跟着BalusC的example解析錯誤,而其中的taglib

但是當我包括在我.xhtml頁面此行:

<%@taglib prefix="f" uri="/WEB-INF/functions.tld" %> 

解析頁面代碼時出現錯誤。

我該如何解決這個問題?

回答

1

答案針對的是一個問題,它的提問者已知在JSP上使用JSF 1.x。您在那裏使用的語法特定於JSP,它是自JSF 2.0以來棄用的Facelets的傳統前身。

完全擺脫functions.tld文件。聲明基於現有的靜態方法的自定義函數的正確JSF 2.x的Facelets的方法如下:

  1. 首先創建一個/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> 
    
  2. 然後在/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

  3. 最後聲明和按如下方式使用它:

    <html ... xmlns:func="http://example.com/functions"> 
    ... 
    <h:outputScript>var foo = '#{func:escapeJavaScript(bean.foo)}';</h:outputScript> 
    

請注意,我已經更新了你相應的找到了答案。另請注意,如果您使用的是JSF實用程序庫OmniFaces,則此功能已作爲#{of:escapeJS(bean.foo)}提供。