在JSTL中编写自定义函数

San*_*ish 5 java jsp jstl function

我正在使用jstl C:forEach在jsp中打印表.我验证它,像

         <c:choose>
          <c:when test="${varName eq condition}">
             <c:out value="${fn:substring(varName, 0, 3)}
          </c:when>
          <c:otherwise>
            ${varName}
          </c:otherwise>
         </c:choose>
Run Code Online (Sandbox Code Playgroud)

因此,这会根据需要打印结果,并且我可以将场景用于同一页面中的其他字段以及其他页面.

有没有办法通过将参数传递给它来重用jstl代码.我们为方法所做的事情Java(在类中写入并在需要的地方访问它)?

在此先感谢您的有价值的答案和评论?

obo*_*ain 5

您可以定义自己的自定义 JSP 标记。在 JSP 2.0 中,您可以使用JSP 标记文件,其语法与 JSP 页面非常相似。

WEB-INF目录下创建子目录:/WEB-INF/tags/mytaglib

在此目录中,创建一个文件displayVarName.tag

<%@ tag body-content="empty" %> 
<%@ taglib prefix="c"   uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fn"  uri="http://java.sun.com/jsp/jstl/functions"%>

<%@ attribute name="varName"    rtexprvalue="true"  required="true" type="java.lang.String"  description="Description of varName" %> 
<%@ attribute name="condition"  rtexprvalue="true"  required="true" type="java.lang.String"  description="Description of condition" %> 

<c:choose>
   <c:when test="${varName eq condition}">
      <c:out value="${fn:substring(varName, 0, 3)}
   </c:when>
   <c:otherwise>
      ${varName}
   </c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)

现在您可以使用以下命令导入您的标签并在您的JSP页面中使用它:

<%@taglib prefix="mytaglib"   tagdir="/WEB-INF/tags/mytaglib"%>

<mytaglib:displayVarName varName=${varName} condition=${condition} />
Run Code Online (Sandbox Code Playgroud)