2012-11-30 1 views
8

Ich habe eine Java-Anwendung ohne Rahmen. Es besteht aus JSP-Dateien für die Ansicht und Servlets für die Geschäftslogik. Ich muss die Benutzersitzung als das Servlet mit einem firstName-Parameter festlegen. In der JSP-Datei muss ich überprüfen, ob mein firstName-Parameter einen Wert hat oder nicht. Wenn der Parameter firstName gesetzt ist, muss ich etwas HTML in der JSP-Datei anzeigen. Wenn es nicht festgelegt ist, muss ich unterschiedliche HTML in der JSP-Datei anzeigen.Überprüfen des Servlet-Sitzungsattributwerts in der JSP-Datei

Servlet.java:

HttpSession session = request.getSession(); 
session.setAttribute("firstName", customer.getFristName()); 
String url = "/index.jsp"; 
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url); 
dispatcher.forward(request, response); 

header.jsp:

// Between the <p> tags bellow I need to put some HTML with the following rules 
// If firstName exist: Hello ${firstName} <a href="logout.jsp">Log out</a> 
// Else: <a href="login.jsp">Login</a> or <a href="register.jsp">Register</a> 

<p class="credentials" id="cr"></p> 

Was wäre der beste Weg, dies zu tun?

Update:

Hier ist ein großes Tutorial ich auf JSTL, jemand, falls gefunden braucht es: http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

Antwort

9
<% if (session.getAttribute("firstName") == null) { %> 
    <p> some content </p> 
<% } else {%> 
    <p> other content </p> 
<% } %> 
+0

Vielen Dank Ibrahim! Diese Lösung ist sauber und einfach. Es hat genau das gemacht, was ich wollte. Ich habe mit Jsp EL gevögelt und es wurde wirklich unordentlich. :) – Marta

+3

Chaotisch? Anscheinend hast du etwas falsch gemacht. Mit JSTL/EL ist es so einfach wie '

einige Inhalte

andere Inhalte

'. Ich bin mir nicht sicher, wie das unordentlicher ist. – BalusC

+0

@BalusC Ich habe es wirklich getan! Ich suchte nach einem if-else Konstrukt in EL und konnte es nicht zur Arbeit bringen, also gab ich die Idee auf. Wenn ich dein Beispiel betrachte, würde es auch tun, was ich wollte. Ich werde wahrscheinlich dieses verwenden, anstatt Java-Code in meine JSP einzufügen. Ich habe gelesen, dass es besser ist, EL/JSTL als Java in Ihren JSPs zu verwenden. Danke für Ihre Hilfe! – Marta

0

Im Servlet Sie schreiben können wie folgt

 HttpSession session = request.getSession(true); 
     session.setAttribute("firstName", customer.getFristName()) 
     response.sendRedirect("index.jsp"); 

Die request.getSession(true) gibt eine neue Sitzung zurück, wenn keine Sitzung vorhanden ist, andernfalls wird die aktuelle Sitzung zurückgegeben. Und in der index.jsp Seite, die Sie wie folgt tun: Hier

<% 
if(session.getAttribute("firstName")==null) { 
%> 
<jsp:include page="firstPage.html"></jsp:include> 
<% 
} else { 
%> 
<jsp:include page="secondPage.html"></jsp:include> 
<% 
}%> 

, wenn die firstName null ist, dann wird firstPage.html sonst secondPage.html in der Seite enthalten sein.

+0

Danke Visruth! Tolle Erklärung zur getSession (true). – Marta

+1

Das 'request.getSession()' tut ** genau ** das gleiche unter den Abdeckungen. Siehe auch [das Javadoc] (http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest).html # getSession()). Tatsächlich ist das "wahre" Argument völlig überflüssig. – BalusC

1

Ich denke, der beste Weg, es zu tun ist die Verwendung von JSTL-Tags. Weil für die einfache JSP-Anwendung es eine gute Idee wäre, den ganzen Java-Code zu HTML hinzuzufügen, aber eine schwerere Anwendung ist es am besten, Java-Code auf HTML zu verwenden. (Separate Ansichtsebene von Logik) (lesen Sie dieses für mehr https://stackoverflow.com/a/3180202/2940265)
Für Ihre Erwartung können Sie Code wie Balg

verwenden
<c:if test="${not empty firstName}"> 
    <%--If you want to print content from session--%> 
    <p>${firstName}</p> 

    <%--If you want to include html--%> 
<%@include file="/your/path/to/include/file.jsp" %> 

    <%--include only get wrong if you give the incorrect file path --%> 
</c:if> 
<c:if test="${empty firstName}"> 
    <p>Jaathi mcn Jaathi</p> 
</c:if> 

Wenn Sie jstl nicht richtig eingeschlossen haben, können Sie erwartete Ausgabe nicht erhalten. beziehen Sie sich für solche Vorfall https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project-correctly/

Verwandte Themen