2

我目前正在开发一个需要使用 JSP 的项目,并且我正在尝试编写一个自定义标签来生成 A 链接(因为无论如何,所有链接上总是提供一些参数,所以我想将所有这些都封装在一个地方)。

理想情况下,我希望能够编写我的链接,例如:

<h:link value="${policy.name}" href="show">
    <h:param name="id" value="${policy.id}" />
    .... There will be an arbitrary number of these, with arbitrary names and values ....
</h:link>

并有这个写一个链接:

<a href="show?id=1&customer=234" />

其中“客户”是始终存在的参数之一。

到目前为止,我已经尝试通过在我的标签中使用 jsp:doBody 来做到这一点,并且标签的主体是 c:param 或 spring:param 标签,但这些都不起作用。环顾四周,我能想到的最好的方法是用 Java 编写我的自定义标签——我真的很讨厌这样做,因为它开始意味着我的视图是用 JSP 和 Java 的拆分编写的——或者做一些非常hacky的事情,比如构建一个地图并将其传递给标签。

有没有更好的方法来实现这样的目标?

4

2 回答 2

1

因此,事实证明,您可以通过在标签顶部指定来使用动态属性:

<%@ tag dynamic-attributes="dynattrs" %>

然后,这将在您的标签中提供一个名为dynattrs的属性,其中包含所有未使用的属性。这是一个地图,可以这样使用。因此,我可以将我的标签称为:

<h:link value="${policy.name}" href="show" id="${policy.id} />

并且id属性将作为dynattrs映射中的单个条目提供。

于 2013-04-10T16:06:24.550 回答
-1

编写标签很容易:将它们放在WEB-INF/tags下

<!-- myTag.tag -->
<%@ tag language="java" pageEncoding="UTF-8"%>

<%@ attribute name="id" description="Customer" required="true"%>
<%@ attribute name="customer" description="Id" required="true"%>

<a href="show?id=${id}&customer=${customer}" />

HTML

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

<tags:myTag id="1" customer="James Bond" />

地图标签

<!-- myMapTag.tag -->
<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ attribute name="map" description="My Key Value Map" type="java.util.Map" required="true"%>

<c:forEach items="${map}" var="pair">
     <a href="show?id=${pair.key}&customer=${pair.value}" />
</c:forEach>

Servlet/Portlet

Map<Long, String> pairMap = new HashMap<Long, String>();
pairMap.put(1L, "YooZoo");
pairMap.put(2L, "YooZoo Oh Oh");

request.setAttribute("pairMap", true);

HTML

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

<tags:myMapTag map="${pairMap}" />
于 2013-04-09T11:24:40.170 回答