【问题标题】:Adding new parameter to current URL using JSTL使用 JSTL 向当前 URL 添加新参数
【发布时间】:2015-10-20 15:10:58
【问题描述】:

我的应用程序允许用户在任何给定时刻更改语言,这给我带来了一些麻烦。例如,如果用户通过 URL 指定页面:/category/8?page=3,然后尝试通过?language=en 更改语言,它将删除以前的参数并将他带到第一页。

如何获取当前 URL 并向其添加另一个参数?我想实现这样的目标:/category/8?page=3&language=en 当前 ULR 为 /category/8?page=3 并且用户尝试更改语言。

我尝试使用${pageContext.request.requestURL},但这不是我想要的,因为它返回 jsp 页面。

【问题讨论】:

  • 到目前为止您尝试了什么?你的代码是什么样的?答案将完全基于意见。如果不提供更多信息,您的问题可能会被关闭。
  • 我已经用我尝试过的东西更新了帖子,但我真的不知道我还能写什么。问题很简单——点击一个链接后,我想像我写的那样向当前 URL 添加另一个参数。

标签: java jsp spring-mvc url jstl


【解决方案1】:

这是我使用的标签文件。另存为/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>

在其他页面中的使用(前网址为/category/9?page=3):

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

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

输出是/category/8?page=3&amp;language=en

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2012-01-23
    • 2019-07-04
    • 2012-05-01
    • 2010-10-03
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多