HelloTag.Java
public class HelloTag extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
ArrayList outerList = new ArrayList();
ArrayList innerList = null;
for (int i = 0; i < 5; i++) {
innerList = new ArrayList();
innerList.add("1");
innerList.add("Name");
outerList.add(innerList);
}
for (int i = 0; i < outerList.size(); i++) {
for (int j = 0; j < innerList.size(); j++) {
out.println(innerList.get(j));
}
}
}
}
在JSP文件中,
有以下代码段:
<body>
<ct:Hello></ct:Hello>
</body>
当我运行JSP文件时,该文件显示了正确的结果。但
我要决定来自自定义标签类的每个值
如
<c:set var="name" scope="" value=""/>
<c:choose>
<c:when test="${name == 1}">
This is Your ID:-
</c:when>
<c:otherwise>
This is Your Name
</c:otherwise>
</c:choose>
上面的代码仅出于示例目的。请更新我如何决定自定义标记类的每个值。
解释我的问题的另一种方式是,我想将每个值存储在变量中,然后仅使用不带Scriplet标签的JSTL来决定该值(专注于上述情况(HelloTag.Java))
最佳答案
真的不清楚您要问什么。但实际上,您的标记只是在外部列表的每个内部列表中循环(嗯,事实上,我想它应该这样做,但是它有一个错误,所以没有)。
您不需要自定义标记来执行此操作,因为JSTL <c:forEach>
标记已执行该操作。假设您有一个externalList存储在请求(或页面,会话或应用程序)属性中:
<%-- iterate through the outer list --%>
<c:forEach var="innerList" items="${outerList}">
<%-- iterate through the innerList --%>
<c:forEach var="element" items="${innerList}">
<%-- do what you want with the element --%>
</c:forEach>
</c:forEach>
从您的问题来看,在我看来,您不应有内部名单。而是,外部列表应包含具有
Person
和getId()
方法的对象(例如,getName()
类的实例)。因此,循环将是:<%-- iterate through the outer list --%>
<c:forEach var="person" items="${personList}">
ID : ${person.id}<br/>
Name : <c:out value="${person.name}"/>
</c:forEach>