I'm using the following code to print the name of the user on the browser:
<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>
Every time I execute it, the message
I see! You don't have a name.. well.. Hello no name
gets displayed even though I haven't entered anything in the textbox. However if I enter anything in it, then the response.jsp code is displayed, but I don't want the first message to be displayed on execution. How do I make that happen? Please suggest changes in my code.
P.S. I had read in some questions that instead of checking for equality with null, one must check it for not equals, so that it doesn't throw null pointer exception. when I tried the same, i.e. if(user != null && ..)
, I got NullPointerException
.
JSP if else is a control statement to get the code executed on the basis of results derived conditional statement defined. This is very much used not only in JSP programming but also in other programming languages like Java, C, C++, python, and many. It is very common to see these statements in any existing code.
You can not use the If else condition in HTML code (Without JavaScript). Because HTML is a markup language and not a programming language. You need to do logic codes either server-side or with Javascript.
Use if to specify a block of code to be executed, if a specified condition is true. Use else to specify a block of code to be executed, if the same condition is false. Use else if to specify a new condition to test, if the first condition is false. Use switch to select one of many blocks of code to be executed.
The jsp:useBean, jsp:setProperty and jsp:getProperty tags are used for bean development.
It's almost always advisable to not use scriptlets in your JSP. They're considered bad form. Instead, try using JSTL (JSP Standard Tag Library) combined with EL (Expression Language) to run the conditional logic you're trying to do. As an added benefit, JSTL also includes other important features like looping.
Instead of:
<%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" %>
<% } %>
Use:
<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>
Also, unless you plan on using response.jsp somewhere else in your code, it might be easier to just include the html in your otherwise statement:
<c:otherwise>
<h1>Hello</h1>
${user}
</c:otherwise>
Also of note. To use the core tag, you must import it as follows:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
You want to make it so the user will receive a message when the user submits a username. The easiest way to do this is to not print a message at all when the "user" param is null
. You can do some validation to give an error message when the user submits null
. This is a more standard approach to your problem. To accomplish this:
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>
Instead of if-else condition use if in both conditions. it will work that way but not sure why.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With