JSP 使用JSTL向当前URL添加新参数

xe55xuns  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(156)

我的应用程序允许用户在任何给定的时刻改变语言,这给我带来了一些麻烦。例如,如果用户通过URL指定页面:/category/8?page=3,然后会尝试通过?language=en更改语言,它将擦除以前的参数,并将他带到第一页。
我怎样才能得到一个当前的URL并添加另一个参数到它?我想实现这样的事情:当前ULR为/category/8?page=3且用户尝试更改语言时,/category/8?page=3&language=en
我尝试使用${pageContext.request.requestURL},但这不是我所寻找的,因为它返回jsp页面。

ruyhziif

ruyhziif1#

下面是我使用的一个标记文件,将其保存为/WEB-INF/tags/replaceParam.tag

<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ attribute name="name" required="true" type="java.lang.String" %>
<%@ attribute name="value" required="true" type="java.lang.String" %>

<c:url value="">

    <%-- 
      replaces or adds a param to a URL
      if $name in query then replace its value with $value. 
      copies existing 
    --%>

    <c:forEach items="${paramValues}" var="p">
        <c:choose>
            <c:when test="${p.key == name}">
                <c:param name="${name}" value="${value}"/>
            </c:when>
            <c:otherwise>
                <c:forEach items="${p.value}" var="val">
                    <c:param name="${p.key}" value="${val}"/>
                </c:forEach>
            </c:otherwise>
        </c:choose>
    </c:forEach>

    <%-- if $name not in query, then add --%>
    <c:if test="${empty param[name] }">
        <c:param name="${name}" value="${value}"/>
    </c:if>

</c:url>

在其他页面中的用法(例如url为/category/9?page=3):

<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>

<my:replaceParam name='language' value='en' />

输出为/category/9?page=3&language=en

相关问题