在JSP中构建URL

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,等等。
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>

这将创建一个漂亮且干净的URL,独立于请求中的page参数。这种方法的好处是URL可以是任何内容。


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>

很遗憾,我的分页组件(由于重用)不知道哪些参数对URL有效,也不能自行设置它们。它只能添加页面参数。 - igo
如果您的代码为空,那么您可以检查它:<c:if test="${param.filter is empty}">your code is here</c:if> - user2173738
在需要将请求属性作为URL参数传递时,可以使用<c:param name="page" value="${page}"/>标签来添加参数“page”,其中“page”是请求属性。如果需要使用参数而不是属性,则可以使用“param”前缀。 - user2173738

2

要基于当前URL构建新的URL,首先需要从request对象中获取当前URL。在JSP中访问request对象,可以使用由JSP表达式语言定义的pageContext隐式对象

${pageContext.request.requestURL}  

这里是在JSP页面中构建URL的简单示例:

test.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。
使用JSTLExpression Language实现了查询字符串的检查。我们使用 getRequestURL() 方法获取当前URL。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接