2015-10-20 86 views
3

我的應用程序允許用戶在任何給定的時刻更改語言,這會給我帶來一些麻煩。例如,如果用戶通過URL指定頁面:/category/8?page=3,然後嘗試通過?language=en更改語言,它將刪除以前的參數並將其帶到第一頁。使用JSTL向當前URL添加新參數

如何獲取當前網址並向其中添加其他參數?我希望實現如下目標:/category/8?page=3&language=en當前ULR爲/category/8?page=3,並且用戶嘗試更改語言。

我試過使用${pageContext.request.requestURL}但這不是我所期待的,因爲它返回jsp頁面。

+0

那你試試這麼遠嗎?你的代碼是什麼樣的?答案將完全基於意見。在沒有提供進一步信息的情況下,您的問題可能會被關閉 – GottZ

+0

我已經用我嘗試過的東西更新了帖子,但並不知道我還能寫什麼。問題非常簡單 - 點擊一個鏈接後,我想像我寫的那樣向當前URL添加另一個參數。 –

回答

5

這是我使用的標籤文件。將其保存爲/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/8?page=3&language=en

+0

非常感謝。這正是我需要的。 –