2014-11-14 18 views
5

Sto utilizzando il seguente codice per stampare il nome dell'utente del browser:Utilizzando if-else in JSP

<body> 
    <form> 
    <h1>Hello! I'm duke! What's you name?</h1> 
    <input type="text" name="user"><br><br> 
    <input type="submit" value="submit">&nbsp;&nbsp;&nbsp;&nbsp; 
    <input type="reset"> 
    </form> 
    <%String user=request.getParameter("user"); %> 
    <%if(user == null || user.length() == 0){ 
    out.print("I see! You don't have a name.. well.. Hello no name"); 
    } 
    else {%> 
     <%@ include file="response.jsp" %> 
    <% } %> 
</body> 

response.jsp:

<body> 
    <h1>Hello</h1> 
    <%= request.getParameter("user") %> 
body> 

Ogni volta che lo eseguo esso , il messaggio

Vedo! Non hai un nome .. beh .. Hello no name

viene visualizzato anche se non ho inserito nulla nella casella di testo. Tuttavia se inserisco qualcosa in esso, viene visualizzato il codice response.jsp, ma non voglio che il primo messaggio venga visualizzato all'esecuzione. Come posso farlo? Si prega di suggerire modifiche nel mio codice.

P.S. Ho letto in alcune domande che invece di controllare l'uguaglianza con null, si deve controllarlo per non eguaglianza, in modo che non generi un'eccezione di puntatore nullo. quando ho provato lo stesso, cioè if(user != null && ..), ho ottenuto NullPointerException.

risposta

14

È quasi sempre consigliabile non utilizzare scriptlet nel JSP. Sono considerati una cattiva forma. Prova invece a utilizzare JSTL (Libreria tag standard JSP) in combinazione con EL (linguaggio di espressione) per eseguire la logica condizionale che stai tentando di eseguire. Come ulteriore vantaggio, JSTL include anche altre funzionalità importanti come il looping.

Invece di:

<%String user=request.getParameter("user"); %> 
<%if(user == null || user.length() == 0){ 
    out.print("I see! You don't have a name.. well.. Hello no name"); 
} 
else {%> 
    <%@ include file="response.jsp" %> 
<% } %> 

Usa:

<c:choose> 
    <c:when test="${empty user}"> 
     I see! You don't have a name.. well.. Hello no name 
    </c:when> 
    <c:otherwise> 
     <%@ include file="response.jsp" %> 
    </c:otherwise> 
</c:choose> 

Inoltre, a meno che non si prevede di utilizzare response.jsp da qualche altra parte nel codice, potrebbe essere più facile da solo includere il codice html nella tua altrimenti dichiarazione:

<c:otherwise> 
    <h1>Hello</h1> 
    ${user} 
</c:otherwise> 

Nota anche. Per utilizzare il tag di base, è necessario importarlo come segue:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

si vuole fare in modo che l'utente riceverà un messaggio quando l'utente invia un nome utente. Il modo più semplice per farlo è non stampare affatto un messaggio quando il parametro "utente" è null. È possibile eseguire alcune convalide per fornire un messaggio di errore quando l'utente invia null. Questo è un approccio più standard al tuo problema. Per fare questo:

In scriptlet:

<% String user = request.getParameter("user"); 
    if(user != null && user.length() > 0) { 
     <%@ include file="response.jsp" %> 
    } 
%> 

In JSTL:

<c:if test="${not empty user}"> 
    <%@ include file="response.jsp" %> 
</c:if> 
+0

questo funziona, grazie mille:) Per favore, puoi dirmi una soluzione usando scriplets – Awani

+0

@ user2195963 La soluzione più semplice per non visualizzare il testo è renderla condizionata all '"utente" che è nullo o vuoto. Quello che stai chiedendo è un modo per rendere la pagina abbastanza intelligente da sapere che "utente" è nullo perché è la prima volta che visita la pagina. Si prega di vedere le mie modifiche per risolvere questo problema. – sfedak

0

Puoi provare questo esempio:

<form> 
 
    <h1>Hello! I'm duke! What's you name?</h1> 
 
    <input type="text" name="user"> 
 
    <br> 
 
    <br> 
 
    <input type="submit" value="submit">&nbsp;&nbsp;&nbsp;&nbsp; 
 
    <input type="reset"> 
 
</form> 
 
<h1>Hello ${param.user}</h1> 
 
<!-- its Expression Language -->

1

Invece di utilizzare if else, se in entrambe le condizioni. funzionerà in questo modo ma non è sicuro del perché.