Jsp 用0+;键/值参数

Jsp 用0+;键/值参数,jsp,jstl,jsp-tags,Jsp,Jstl,Jsp Tags,我目前正在处理一个需要使用JSP的项目,我正在尝试编写一个自定义标记来生成链接(因为不管怎样,在所有链接上都会提供一些参数,所以我想将所有这些封装在一个地方) 理想情况下,我希望能够像这样编写我的链接: <h:link value="${policy.name}" href="show"> <h:param name="id" value="${policy.id}" /> .... There will be an arbitrary number of

我目前正在处理一个需要使用JSP的项目,我正在尝试编写一个自定义标记来生成链接(因为不管怎样,在所有链接上都会提供一些参数,所以我想将所有这些封装在一个地方)

理想情况下,我希望能够像这样编写我的链接:

<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的一部分编写的——要么做一些非常粗糙的事情,比如构建一个映射并将其传递给标记


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

编写标记非常简单:将它们放在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


地图标签

<!-- 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);
Map pairMap=newhashmap();
pairMap.put(1L,“YooZoo”);
pairMap.put(2L,“YooZoo-Oh”);
setAttribute(“pairMap”,true);
HTML


因此,您可以通过在标记顶部指定以下内容来使用动态属性:

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

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

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

但这实际上并没有回答我的问题。写标签很容易。编写以任意数量的键/值对作为参数的标记,然后可以在标记中使用,这是我找不到任何合适的方法来做的…因此在您的示例中,如果没有糟糕的黑客解决方案jsp:useBean和c:set,我将如何实际调用标记?诸如此类,我在脑子里打字,所以可能不是100%准确,但你明白了。更新的答案。不过这是在Java控制器中。我想做JSP中的所有事情。根据我的示例,我有一个JSP,它呈现一个HTML页面,并将超链接从摘要表写入表中的每个元素。我想写一个JSP标记文件,它封装了一个链接的编写,这样我就不必在整个系统中的每个链接之间重复所有的公共参数很多次,这样JSP模板就可以使用这个传入值并生成适当的标记。但这是一个坏习惯。不要将Java代码混合到只支持JSP的EL和JSTL中。
<%@ tag dynamic-attributes="dynattrs" %>
<h:link value="${policy.name}" href="show" id="${policy.id} />