使用0+键/值参数编写JSP标记

时间:2013-04-09 11:17:21

标签: jsp jstl jsp-tags

我目前正在开发一个项目,我需要使用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的事情,比如建立一个Map并将其传递给标签。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:-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}" />