找不到EL函数错误

时间:2012-04-19 11:30:58

标签: java jsf-2 el

我正在尝试使用带有jsfbean参数的自定义EL函数调用方法。

<c:set var="test1" value="${cx:methodName('para')}" scope="session"/>
        <h:outputText value="#{test1}"/>

我做了以下ID TLD并将其推入WEB-INF

  <?xml version="1.0" encoding="UTF-8" ?>
    <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-jsptaglibrary_2_1.xsd"
        version="2.1">

        <tlib-version>1.0</tlib-version>
        <short-name>Custom_Functions</short-name>
        <uri>http://example.com/functions</uri>

        <function>
            <name>methodName</name>
            <function-class>funcionclass(Jsfbean)</function-class>
            <function-signature>java.lang.String methodName(java.lang.String)</function-signature>
        </function>
    </taglib>

我也在web.xml中配置

<jsp-config> 
        <taglib> 
               <taglib-uri>http://example.com/functions</taglib-uri> 
               <taglib-location>/WEB-INF/functions.tld</taglib-location> 
        </taglib> 
</jsp-config>

仍然发现找不到功能错误。

以下是方法代码

public static String methodName(String s1) throws Exception
    {
        return "Kshitij";
    }

可以任何身体帮助。

2 个答案:

答案 0 :(得分:3)

您在使用Facelets时创建了JSP EL函数。这不会起作用。此外,您的<function-class>声明不正确。它应指定完整限定类名(FQN)。例如。 com.example.FunctionClass

使用以下更新内容将taglib文件重命名为/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>methodName</function-name>
        <function-class>com.example.FunctionClass</function-class>
        <function-signature>java.lang.String methodName(java.lang.String)</function-signature>
    </function>
</facelet-taglib>

然后你需要在web.xml中注册它,如下所示(不要忘记删除旧的JSP taglib注册!):

<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/functions.taglib.xml</param-value>
</context-param>

最后通过以下XML命名空间在您的视图中声明它

xmlns:cx="http://example.com/functions"

对具体问题

无关,有另一种方法,可能更容易:install JBoss EL。这样,您就可以在新的EL 2.2中调用bean上的方法。

答案 1 :(得分:1)

您仍然需要在jsp中包含引用:

<%@taglib prefix="cx" uri="http://example.com/functions"%>