Как я могу добавить параметры в тег c: import в цикле? - PullRequest
3 голосов
/ 16 июня 2011

Я хочу сделать что-то вроде этого:

            <c:import url="${myvar.url}">
               <c:forEach items="${myvar.params}" var="param">
                  <c:param name="${param.name}" value="${param.value}"/>
               </c:forEach>
            </c:import>

И я получаю эту ошибку:

Недопустимый дочерний тег в теге "c: import": тег "c: forEach"

По-видимому, c: import ожидает наличие в нем c: param и вместо этого видит c: forEach.

У меня возникает та же проблема, если я пробую jsp: include и jsp: params.

Любая помощь?

Ответы [ 2 ]

9 голосов
/ 23 июля 2012

Если вы не хотите беспокоиться о грязном "?"и логику "&" вы также можете использовать что-то вроде следующего:

<c:url var="urlWithQueryString" value="${myvar.url}">
    <c:forEach var="thisParam" items="${myvar.params}">
        <c:param name="${thisParam.name}">${thisParam.value}</c:param>
    </c:forEach>
</c:url>

<c:import url="${urlWithQueryString}"/>
1 голос
/ 24 июня 2011

Вы не сможете сделать это ни с помощью c: import, ни с помощью jsp: include.

Если это то, что вы собираетесь делать более одного раза, вы можете написать файл тегов, например:

<%@ attribute name="url" required="true" %>
<%@ attribute name="paramMap" required="false" type="java.util.Map"%>
<%@ tag trimDirectiveWhitespaces="true"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:if test="${empty paramMap}">
    <c:import url="${url}"/>
</c:if>
<c:if test="${!empty paramMap}">
    <c:set var="paramString" value=""/>
    <c:forEach var="entry" items="${paramMap}">
        <c:if test="${!empty paramString}">
            <c:set var="paramString">${paramString}&</c:set>
        </c:if>
        <c:set var="paramString">${paramString}<c:out value="${entry.key}"/>=<c:out value="${entry.value}"/></c:set>
    </c:forEach>
    <c:url value="${url}?${paramString}" var="fullUrl"/>
    <c:import url="${fullUrl}"/>
</c:if>

Сохраните это как "importParamMap.tag" в папке "WEB-INF/tags". Чтобы вызвать его на странице, включите каталог тегов и относитесь к нему как к любому другому тегу:

<%@ taglib tagdir="/WEB-INF/tags" prefix="tag" %>
...
<tag:importParamMap url="${myVar.url}" paramMap="${myVar.params}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...