web-dev-qa-db-fra.com

Utilisation de if-else dans JSP

J'utilise le code suivant pour imprimer le nom de l'utilisateur sur le navigateur:

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

Chaque fois que je l'exécute, le message

Je vois! Tu n'as pas de nom .. ben .. bonjour pas de nom

s'affiche même si je n'ai rien entré dans la zone de texte. Cependant, si j'entre quoi que ce soit dedans, le code response.jsp s'affiche, mais je ne veux pas que le premier message s'affiche lors de l'exécution. Comment puis-je y arriver? Veuillez suggérer des changements dans mon code.

P.S. J'avais lu dans certaines questions qu'au lieu de vérifier l'égalité avec null, il faut le vérifier pour non égal, afin qu'il ne lève pas d'exception de pointeur nul. quand j'ai essayé la même chose, c'est-à-dire if(user != null && ..), j'ai eu NullPointerException.

9
Awani

Il est presque toujours conseillé de ne pas utiliser de scriptlets dans votre JSP. Ils sont considérés comme une mauvaise forme. Au lieu de cela, essayez d'utiliser JSTL (bibliothèque de balises standard JSP) combiné avec EL (langage d'expression) pour exécuter la logique conditionnelle que vous essayez de faire. Comme avantage supplémentaire, JSTL comprend également d'autres fonctionnalités importantes comme le bouclage.

Au lieu de:

<%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" %>
<% } %>

Utilisation:

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

De plus, à moins que vous ne prévoyiez d'utiliser response.jsp ailleurs dans votre code, il peut être plus facile d'inclure simplement le code html dans votre instruction else:

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

A noter également. Pour utiliser la balise principale, vous devez l'importer comme suit:

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

Vous souhaitez que l'utilisateur reçoive un message lorsqu'il soumet un nom d'utilisateur. La façon la plus simple de le faire est de ne pas imprimer de message du tout lorsque le paramètre "user" est null. Vous pouvez effectuer une validation pour donner un message d'erreur lorsque l'utilisateur soumet null. Il s'agit d'une approche plus standard de votre problème. Pour y parvenir:

Dans le scriptlet:

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

En jstl:

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

Au lieu de la condition if-else, utilisez if dans les deux conditions. cela fonctionnera de cette façon, mais vous ne savez pas pourquoi.

1
MR AND

Vous pouvez essayer cet exemple:

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