如何为具有2个属性的自定义标记编写(只是一个模板),这些属性允许我使用jstl标记逻辑输出html片段(html表),可以从我的jsp中调用。
这可以在不编写java类的情况下完成,这是我在所有示例中看到的。
我想要实现的是将JSP中重复的JSTL逻辑外部化为自定义标记,然后使用属性在运行时传递标记所需的动态值。
谢谢,
答案 0 :(得分:28)
不要使用scriptlet!他们是一个糟糕的做法,他们让业务逻辑泄漏到您的视图层。
您可以使用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" />
答案 1 :(得分:-3)
在开始的JSP上,您可以将条件的输出放入会话变量,然后通过scriptlet在所有其他变量中使用该会话变量,而不是采用标记方法。如下所示:
启动JSP
<% boolean doStuff = isMyConditionTrue ? true : false;
session.setAttribute("doStuff", doStuff);
%>
其他JSP
<% if(session.getAttribute("doStuff") != null && (boolean)session.getAttribute("doStuff")) {
%>
//do stuff
<% } %>