2012-11-30 12 views
8

Non ho un'applicazione java framework. Consiste di file jsp per la visualizzazione e servlet per la business logic. Devo impostare la sessione utente è il servlet con un parametro firstName. Nel file jsp, ho bisogno di controllare se il mio parametro firstName ha un valore o meno. Se il parametro firstName è impostato, ho bisogno di visualizzare alcuni html nel file jsp. Se non è impostato, ho bisogno di visualizzare diversi html nel file jsp.Verifica del valore dell'attributo della sessione servlet nel file jsp

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> 

Quale sarebbe il modo migliore per farlo?

Aggiornamento:

Ecco un tutorial che ho trovato su JSTL, nel caso qualcuno ne ha bisogno: http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

risposta

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

Grazie Ibrahim! Questa soluzione è semplice e pulita. Ha fatto esattamente quello che volevo che facesse. Stavo scherzando con jsp EL e stava diventando molto complicato. :) – Marta

+3

Disordinato? A quanto pare hai fatto qualcosa di sbagliato. Con JSTL/EL è semplice come '

alcuni contenuti

altri contenuti

'. Non sono sicuro di come sia più complicato. – BalusC

+0

@BalusC, certo! Stavo cercando un costrutto if-else in EL, e non riuscivo a farlo funzionare, quindi ho abbandonato l'idea. Guardando il tuo esempio, farebbe anche quello che volevo. Probabilmente userò questo invece di inserire il codice java nel mio JSP. Ho letto che è meglio usare EL/JSTL di java nei tuoi JSP. Grazie per l'aiuto! – Marta

0

Nella servlet è possibile scrivere quanto segue

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

Lo request.getSession(true) restituisce una nuova sessione se non esiste alcuna sessione, altrimenti restituirà la sessione corrente. E, nella pagina index.jsp si può fare come segue:

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

Qui, se il firstName è null allora firstPage.html saranno inclusi nella pagina altrimenti secondPage.html.

+0

Grazie Visruth! Ottima spiegazione su getSession (true). – Marta

+1

'request.getSession()' fa ** esattamente ** lo stesso sotto le copertine. Vedi anche [javadoc] (http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html # getSession()). In effetti, l'argomento 'true' è del tutto superfluo. – BalusC

1

Penso che il modo migliore per farlo sia l'uso dei tag jstl. Perché per la semplice applicazione jsp potrebbe essere una buona idea aggiungere tutto il codice java a html ma un'applicazione più pesante è meglio usare il minimo codice java su html. (Livello di visualizzazione separato dalla logica) (leggi questo per ulteriori https://stackoverflow.com/a/3180202/2940265)
Per il tuo aspettativa si può facilmente usare codice come muggito

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

Se non hai incluso jstl correttamente non potrai ottenere l'output previsto. riferire questo per tale incidente https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project-correctly/

Problemi correlati