如何在循环中将params添加到c:import标记中



我想做这样的事情:

            <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,我也会遇到同样的问题。

有什么帮助吗?

如果您不想担心混乱的"?"one_answers"&"逻辑,您也可以使用以下内容:

<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}"/>

使用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>

将其另存为"WEB-INF/tags"文件夹中的"importParamMap.tag"。要在页面中调用它,请包含标签目录并将其视为任何其他标签:

<%@ taglib tagdir="/WEB-INF/tags" prefix="tag" %>
...
<tag:importParamMap url="${myVar.url}" paramMap="${myVar.params}"/>

相关内容

最新更新