2013-03-29 8 views
6

Sagen wir meine aktuelle URL ist: /app.jsp?filter=10&sort=name.Composing URL in JSP

Ich habe eine Paginierung Komponente in JSP, die Links wie enthalten sollte:
/app.jsp?filter=10&sort=name&page=xxx.

Wie erstelle ich gültige URLs in JSP, indem der aktuellen URL neue Parameter hinzugefügt werden? Ich mag nicht Java-Code in JSP verwenden, noch am Ende mit URLs wie:
/app.jsp?filter=10&sort=name&?&page=xxx oder /app.jsp?&page=xxx usw.

Antwort

9

Ok, ich habe die Antwort gefunden. Das erste Problem ist, dass ich alle aktuellen Parameter in der URL beibehalten und nur den Parameter page ändern muss. Dazu muss ich über alle aktuellen Parameter iterieren und diejenigen hinzufügen, die ich nicht in URL ändern möchte. Dann habe ich Parameter hinzugefügt, die ich ändern oder hinzufügen möchte. So landete ich mit Lösung wie diese auf:

<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> 

Das wird schön und sauber URL unabhängig von page Parametern in Anfrage erstellen. Bonus für diesen Ansatz ist, dass die URL einfach alles sein kann.

8
<c:url var="myURL" value="/app.jsp"> 
    <c:param name="filter" value="10"/> 
    <c:param name="sort" value="name"/> 
</c:url> 

die URL zeigen Sie so etwas wie diese

<a href="${myURL}">Your URL Text</a> 
+0

leider meine Paginierung Komponente (wegen der Wiederverwendung) weiß nicht, welche Parameter für die URL gültig sind und kann sie auch nicht selbst festlegen. Es kann nur die Parameterseite – igo

+0

hinzufügen, dann können Sie es überprüfen Ihr Code ist hier –

+0

dh Hinzufügen Parameter Seite' 'wo' Seite' ist eine Anfrage attr und wird Parameter in sein die URL, wenn Sie Parameter anstelle von attr benötigen, dann verwenden Sie 'param' Präfix. –

2

tun können, um Erstellen Sie eine neue URL basierend auf der aktuellen URL, müssen Sie zuerst die aktuelle URL aus dem request Objekt abrufen. Für den Zugriff auf das request Objekt in einer JSP verwenden pageContextimplicit object definiert durch die JSP Expression Language:

${pageContext.request.requestURL} 

Hier ist das einfache Beispiel für den Aufbau URL in einer JSP-Seite:

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> 


Diese Lösung ermöglicht das Erstellen von URLs abhängig davon, ob die aktuelle URL bereits eine Abfragezeichenfolge enthält oder nicht. So hängen Sie sie jeweils entweder

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

oder nur

?page=xxx

auf die aktuelle URL.

JSTL und die Expression Language wurden verwendet, um das Überprüfen auf eine Abfragezeichenfolge zu implementieren. Und wir verwendeten getRequestURL() Methode, um die aktuelle URL zu erhalten.