我想做这样的事情:
<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}"/>