Можно ли создать собственный тег JSTL, который принимает нестроковый атрибут?
Я хотел бы создать тег, который бы обрабатывал разбиение на страницы с помощью PagedListHolder из Spring MVC.
<%@tag body-content="scriptless" description="basic page template" pageEncoding="UTF-8"%>
<%-- The list of normal or fragment attributes can be specified here: --%>
<%@attribute name="pagedList" required="true" %>
<%-- any content can be specified here e.g.: --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
<c:when test="${!pagedList.firstPage}">
<a href="
<c:url value="pagedList">
<c:param name="page" value="${pagedList.page - 1}"/>
</c:url>
"><<
</a>
</c:when>
<c:otherwise>
<<
</c:otherwise>
</c:choose>
<%-- ...more --%>
Для этого тега потребуется экземпляр класса PagedListHolder.
Что-то вроде этого, но я понимаю, что это неверно.
<templ:pagedList pagedList="${players}"/>
Нужно ли мне писать обработчик тегов для этого?
2 ответа
Вы можете просто указать атрибут type
в директиве attribute.
<%@ attribute name="pagedList" required="true" type="org.springframework.beans.support.PagedListHolder" %>
Вкратце: теги JSTL могут иметь не строковые атрибуты, поскольку вы используете spring mvc, ваш класс тега может выглядеть так:
public class PagedListTag extends RequestContextAwareTag {
private PagedListHolder pagedList;
@Override
protected int doStartTagInternal() throws Exception {
// do something with pagedList
return SKIP_BODY;
}
@Override
public void doFinally() {
this.pagedList = null;
super.doFinally();
}
public void setPagedListed(PagedListHolder pagedList) {
this.pagedList = pagedList;
}
}
Единственное, что вам нужно сделать, это правильно зарегистрировать его с помощью атрибута pagedList в вашем .tld файле:
...
<tag>
<name>pagedList</name>
<tag-class>PagedListTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>pagedList</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
...
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.