On my current page I am using JSTL to check if data is available for my form. Problem I am facing is "if there is no data I am not seeing the text fields either". I can solve it using and tags but that would entail lot of if else if else kind of code all through the page. Can anyone suggest me a better cleaner solution to this problem?
<c:if test="${salesData!=null}">
<c:if test="${fn:length(salesBundle.salesArea) > 0}">
<input type="text" id="sales_area" class="salesManagerStyle">
</c:if>
</c:if>
You can have multiple conditions in a test
.
<c:if test="${salesData != null && fn:length(salesBundle.salesArea) > 0}">
<input type="text" id="sales_area" class="salesManagerStyle">
</c:if>
But you can also use the empty
keyword to do both a nullcheck and lengthcheck.
<c:if test="${not empty salesData.salesArea}">
<input type="text" id="sales_area" class="salesManagerStyle">
</c:if>
That's the best what you can get, now. If you need to reuse the same condition elsewhere in the page, then you could also save it by <c:set>
.
<c:set var="hasSalesData" value="${not empty salesData.salesArea}" />
...
<c:if test="${hasSalesData}">
<input type="text" id="sales_area" class="salesManagerStyle">
</c:if>
...
<c:if test="${hasSalesData}">
Foo
</c:if>
I try to put as little logic as possible in my web pages,
"The interface tier is relatively free of application processing; windows or web pages forward task request to middle tier" Graig Larman, Applying UML and Patterns third Edition page 575 - Information Systems: The classic Three-tier architecture.
Also do the control/validation at the client level before persisting the data...but I guess if it is legacy and web pages are the only things you can touch ...this makes sens