web-dev-qa-db-ja.com

JSPでif-elseを使用する

次のコードを使用して、ブラウザーにユーザーの名前を印刷しています。

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

実行するたびに、メッセージ

そうですか!あなたには名前がありません。

テキストボックスに何も入力していなくても表示されます。ただし、何かを入力すると、response.jspコードが表示されますが、実行時に最初のメッセージを表示したくありません。どうすればそれを実現できますか?コードの変更を提案してください。

追伸いくつかの質問で、nullとの同等性をチェックする代わりに、nullポインター例外をスローしないように、等しくないことをチェックする必要があることを読みました。同じこと、つまりif(user != null && ..)を試したときに、NullPointerExceptionが得られました。

9
Awani

JSPではスクリプトレットを使用しないことをお勧めしますほぼ常に。彼らは悪い形と考えられています。代わりに、 [〜#〜] jstl [〜#〜] (JSP Standard Tag Library)とEL(Expression Language)を組み合わせて、使用しようとしている条件ロジックを実行してみてください。行う。追加の利点として、JSTLにはループなどの他の重要な機能も含まれています。

の代わりに:

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

つかいます:

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

また、コードの他の場所でresponse.jspを使用する予定がない限り、otherwiseステートメントにhtmlを含める方が簡単な場合があります。

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

また注目すべき。コアタグを使用するには、次のようにインポートする必要があります。

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

ユーザーがユーザー名を送信したときにユーザーがメッセージを受信できるようにする必要があります。これを行う最も簡単な方法は、「ユーザー」パラメーターがnullのときにメッセージをまったく出力しないことです。ユーザーがnullを送信したときにエラーメッセージを表示するための検証を行うことができます。これは、問題に対するより標準的なアプローチです。これを達成するには:

スクリプトレット内:

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

Jstlの場合:

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

If-else条件の代わりに、両方の条件でifを使用します。それはそのように動作しますが、理由はわかりません。

1
MR AND

この例を試すことができます:

<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