8

假设我当前的 URL 是: /app.jsp?filter=10&sort=name

我在 JSP 中有一个分页组件,它应该包含如下链接:
/app.jsp?filter=10&sort=name&page=xxx.

如何通过向当前 URL 添加新参数在 JSP 中创建有效 URL?我不想在 JSP 中使用 Java 代码,也不想以 URL 结尾:
/app.jsp?filter=10&sort=name&?&page=xxx/app.jsp?&page=xxx等。

4

3 回答 3

12

好的,我找到了答案。第一个问题是我必须保留 URL 中的所有当前参数并仅更改page参数。为此,我必须遍历所有当前参数并将那些我不想更改的参数添加到 URL。然后我添加了我想要更改或添加的参数。所以我最终得到了这样的解决方案:

<c:url var="nextUrl" value="">
    <c:forEach items="${param}" var="entry">
        <c:if test="${entry.key != 'page'}">
            <c:param name="${entry.key}" value="${entry.value}" />
        </c:if>
    </c:forEach>
    <c:param name="page" value="${some calculation}" />
</c:url>

This will create nice and clean URL independent of page parameter in request. Bonus to this approach is that URL can be just anything.

于 2013-04-05T08:50:44.620 回答
9
<c:url var="myURL" value="/app.jsp">
   <c:param name="filter" value="10"/>
   <c:param name="sort" value="name"/>
</c:url>

要显示网址,您可以执行以下操作

<a href="${myURL}">Your URL Text</a>
于 2013-03-29T18:46:41.150 回答
2

要基于当前 URL 构造新 URL,首先需要从object中获取当前 URLrequest。要访问 JSP 中的request对象,请使用JSP 表达式语言定义的pageContext 隐式对象:

${pageContext.request.requestURL}  

下面是在 JSP 页面中构造 URL 的简单示例:

测试.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>Test Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <h1>Testing URL construction</h1>
    <c:choose>
        <c:when test="${pageContext.request.queryString != null}">
            <a href="${pageContext.request.requestURL}?${pageContext.request.queryString}&page=xxx">Go to page xxx</a>
        </c:when>
        <c:otherwise>
            <a href="${pageContext.request.requestURL}?page=xxx">Go to page xxx</a>
        </c:otherwise>
    </c:choose>
</body>
</html>


此解决方案允许您根据当前 URL 是否已包含某些查询字符串来构造 URL 。所以你分别附加

?${pageContext.request.queryString}&page=xxx

要不就

?page=xxx

到当前 URL。

JSTL表达式语言用于实现对查询字符串的检查。我们使用getRequestURL()方法来获取当前的URL。

于 2013-03-29T22:06:39.763 回答