比方说,我目前的网址是: /app.jsp?filter=10&sort=name
。
我在JSP分页组件,它应该包含类似的链接:
/app.jsp?filter=10&sort=name&page=xxx
。
如何通过增加新的参数,以当前URL创建JSP有效的网址? 我不想使用JSP的Java代码,也没有与像URL结束:
/app.jsp?filter=10&sort=name&?&page=xxx
,或/app.jsp?&page=xxx
等
比方说,我目前的网址是: /app.jsp?filter=10&sort=name
。
我在JSP分页组件,它应该包含类似的链接:
/app.jsp?filter=10&sort=name&page=xxx
。
如何通过增加新的参数,以当前URL创建JSP有效的网址? 我不想使用JSP的Java代码,也没有与像URL结束:
/app.jsp?filter=10&sort=name&?&page=xxx
,或/app.jsp?&page=xxx
等
好吧,我找到答案。 第一个问题是,我必须保持在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可以是一切事情。
<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的新URL,你首先需要从获取当前URL request
对象 。 访问request
对象在JSP使用pageContext
隐式对象由JSP表达式语言定义:
${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。
JSTL和表达式语言被用来实施检查查询字符串。 我们使用getRequestURL()
方法来获取当前的URL。