次のコードを使用して、ブラウザーにユーザーの名前を印刷しています。
_<body>
<form>
<h1>Hello! I'm duke! What's you name?</h1>
<input type="text" name="user"><br><br>
<input type="submit" value="submit">
<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
が得られました。
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>
If-else条件の代わりに、両方の条件でifを使用します。それはそのように動作しますが、理由はわかりません。
この例を試すことができます:
<form>
<h1>Hello! I'm duke! What's you name?</h1>
<input type="text" name="user">
<br>
<br>
<input type="submit" value="submit">
<input type="reset">
</form>
<h1>Hello ${param.user}</h1>
<!-- its Expression Language -->