【发布时间】:2011-10-15 18:37:15
【问题描述】:
我将如何为具有 2 个属性的自定义标签编写(只是一个模板),让我使用 jstl 标签逻辑输出一个 html 片段(一个 html 表),可以从我的 jsp 调用。
不写java类就可以做到,这是我在所有例子中看到的。
我想要实现的是将我的 JSP 中重复的 JSTL 逻辑外部化到自定义标记中,然后在运行时使用属性将所需的动态值传递给标记。
谢谢,
【问题讨论】:
我将如何为具有 2 个属性的自定义标签编写(只是一个模板),让我使用 jstl 标签逻辑输出一个 html 片段(一个 html 表),可以从我的 jsp 调用。
不写java类就可以做到,这是我在所有例子中看到的。
我想要实现的是将我的 JSP 中重复的 JSTL 逻辑外部化到自定义标记中,然后在运行时使用属性将所需的动态值传递给标记。
谢谢,
【问题讨论】:
不要使用小脚本!它们是一种不好的做法,它们会让业务逻辑泄漏到您的视图层中。
您可以使用 JSTL 创建标签文件;这很简单。 This 是一个很好的起点。
一个例子:
mytable.tag:
<%@ attribute name="cell1" required="true" type="java.lang.String" description="Text to use in the first cell." %>
<%@ attribute name="cell2" required="false" type="java.lang.String" description="Text to use in the second cell." %>
<table>
<tr>
<td id = "cell1">${cell1}</td>
<td id = "cell2">${cell2}</td>
</tr>
</table>
假设你的标签在/WEB-INF/tags,那么你可以这样使用它:
<%@ taglib prefix="mystuff" tagdir="/WEB-INF/tags" %>
<mystuff:mytable cell1="hello" cell2="world" />
【讨论】:
在您的起始 JSP 上,您可以将条件的输出放入会话变量中,然后通过脚本在所有其他变量中使用该会话变量,而不是采用标记方法。如下所示:
启动 JSP
<% boolean doStuff = isMyConditionTrue ? true : false;
session.setAttribute("doStuff", doStuff);
%>
其他 JSP
<% if(session.getAttribute("doStuff") != null && (boolean)session.getAttribute("doStuff")) {
%>
//do stuff
<% } %>
【讨论】: