2014-11-14 5 views
5

Я использую следующий код, чтобы напечатать имя пользователя в браузере:Используя если-то еще в 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> 

Каждый раз, когда я исполню ее , сообщение

Я вижу! У вас нет имени .. хорошо .. Привет не имя

отображается, хотя я ничего не ввел в текстовое поле. Однако, если я ввожу что-либо в него, тогда отображается код response.jsp, но я не хочу, чтобы первое сообщение отображалось при выполнении. Как это сделать? Пожалуйста, предложите изменения в моем коде.

P.S. Я прочитал несколько вопросов, вместо того, чтобы проверять равенство с нулевым значением, нужно проверить его не равным, чтобы он не выбрал исключение исключающего указателя. когда я попробовал то же самое, то есть if(user != null && ..), я получил NullPointerException.

ответ

14

Это почти всегда рекомендуется не использовать скрипты в вашем JSP. Они считаются плохими. Вместо этого попробуйте использовать JSTL (JSP Standard Tag Library) в сочетании с EL (язык выражений) для запуска условной логики, которую вы пытаетесь сделать. В качестве дополнительного преимущества 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 где-нибудь еще в вашем коде, это может быть проще просто включить этот код в ваш в противном случае:

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

Это работает, спасибо большое:) Но не могли бы вы рассказать мне решение, используя скрипты? – Awani

+0

@ user2195963 Самое простое решение не отображать текст делает его условным, если «пользователь» пуст или пуст. То, что вы просите, - это способ сделать страницу достаточно умной, чтобы знать, что «пользователь» имеет значение null, поскольку это первый раз, когда вы посещаете страницу. Пожалуйста, ознакомьтесь с моими изменениями, касающимися этой проблемы. – sfedak

0

Вы можете попробовать этот пример:

<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

Вместо условия if-else, если в обоих условиях. он будет работать таким образом, но не уверен, почему.

 Смежные вопросы

  • Нет связанных вопросов^_^