能否在不同<c:url>标签中复用绑定的<c:param>参数?
复用JSTL <c:url>的公共<c:param>参数
当然可以实现!不过你之前的写法有点小问题——单独使用<c:param var="...">并不是在定义可复用的参数集合,而是把单个参数的值存到页面变量里。下面给你两种实用的方案来复用公共参数:
方案一:用Map存储公共参数,遍历添加
先把所有公共参数存入一个Map,然后在每个<c:url>标签里遍历Map,自动添加参数:
<%-- 定义公共参数Map --%> <c:set var="commonParams" value="${{'userid': '2', 'username': 'xyx'}}" /> <%-- 第一个URL,复用公共参数 --%> <c:url var="getDetail" value="detail"> <c:forEach items="${commonParams}" var="param"> <c:param name="${param.key}" value="${param.value}" /> </c:forEach> </c:url> <%-- 第二个URL,同样复用公共参数 --%> <c:url var="getProfile" value="profile"> <c:forEach items="${commonParams}" var="param"> <c:param name="${param.key}" value="${param.value}" /> </c:forEach> </c:url>
这个方案的好处是参数集中管理,后续要修改参数值或增减参数,只需要修改commonParams这一处即可,非常灵活。
方案二:用JSP片段复用参数标签
把公共的<c:param>标签单独写到一个JSP片段文件中,然后在每个<c:url>里引入这个片段:
- 创建公共参数片段(比如
/WEB-INF/common_params.jsp):
<c:param name="userid" value="2" /> <c:param name="username" value="xyx" />
- 在需要的
<c:url>中引入片段:
<c:url var="getDetail" value="detail"> <%@ include file="/WEB-INF/common_params.jsp" %> </c:url> <c:url var="getProfile" value="profile"> <%@ include file="/WEB-INF/common_params.jsp" %> </c:url>
这种写法更直观,适合参数结构固定、不需要动态修改的场景。<%@ include %>是编译时包含,不会带来额外的性能开销。
注意点
你之前写的<c:param var="userid" value="2"/>其实是把value="2"存到名为userid的页面变量里,并不是定义一个可复用的参数项。如果要手动在<c:url>里使用这个变量,需要写成<c:param name="userid" value="${userid}"/>,但这样还是要重复写每个参数,不如上面两种方案高效。
内容的提问来源于stack exchange,提问作者Dhanabal
相关产品推荐
相关产品推荐

