如何避免自定义EL功能解决方法?

时间:2017-03-14 20:39:32

标签: javascript html jsp el

我试图理解我的自定义EL功能与标准EL功能相比的失败。我定义了自定义EL函数,funcForJS和funcForHTML,用于嵌入式javascript和JSP文件中的普通HTML标记。我发现虽然普通HTML标记块中引用的funcForHTML已成功解析,但我的嵌入式javascript中使用的funcForJS未被找到"。在嵌入式JavaScript中利用EL函数是不好的做法吗?无论如何 - 它应该像我尝试一样工作吗?向浏览器报告的错误是:

错误500:javax.el.E​​LException:Function' myel:funcForJS'找不到

自定义函数java文件是:

package my.test;
public class MyELFuncs {
  public static java.lang.String funcForJS(java.lang.String str) {
    return str+" JS";
  }
  public static java.lang.String funcForHTML(java.lang.String str) {
    return str+" HTML";
  }
}

,自定义tld文件为:

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">

<tlib-version>1.0</tlib-version>
<short-name>MyTagLibrary</short-name>
<uri>/MyTagLibrary</uri>

<function>
    <description>Returns the same string with JS on end</description>
        <name>funcForJS</name>
        <function-class>my.test.MyELFuncs</function-class>
        <function-signature>java.lang.String funcForJS( java.lang.String )</function-signature>
</function>

<function>
    <description>Returns the same string with HTML on end</description>
        <name>funcForHTML</name>
        <function-class>my.test.MyELFuncs</function-class>
        <function-signature>java.lang.String funcForHTML( java.lang.String )</function-signature>
</function>
</taglib>

在JSP中我有这个:

<%@page session="true" contentType="text/html" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/MyTagLibrary" prefix="myel" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<html>
 <head>
 <title>Process CAP Receive</title>
  <script type="text/javascript">
    // the standard function fn:trim works fine here
    var standardFnTrimStr = "${fn:trim('  this test str  ')}";

    // my custom function throws error
    var myCustFuncStr = "${myel:funcForJS('some test text')}";
    console.log("standardFnTrimStr="+standardFnTrimStr+", myCustFuncStr="+myCustFuncStr);
  </script>
  </head>
  <body>
    <label>${myel:funcForHTML("this is in HTML block")}</label>
  </body>
</html>

在web.xml中我有这个:

<taglib>
  <taglib-uri>/MyTagLibrary</taglib-uri>
  <taglib-location>/WEB-INF/config/myCustomTags.tld</taglib-location>
</taglib>

注意:我发现了一个解决方案,这似乎是我的自定义myel所必需的:funcForJS,但不适用于标准的fn:trim。解决方法是,当我在脚本块外部的html主体中的myel:funcForJS放置一个虚拟引用时,脚本块中的myel:funcForJS成功解析。我没有必要为fn:trim函数做到这一点,那么我的自定义funcForJS有什么不同呢?我错过了什么?

0 个答案:

没有答案