我正在尝试使用带有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";
}
可以任何身体帮助。
答案 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"%>