Search code examples
javajspjakarta-eestruts2ognl

Comparing dates using struts 2 in JSP


I want to compare two dates using Struts2

One is returned from the backend  (test.currentDate) == "2012-11-15)"
The other one I just set "2014-10-19"

How can I compare the two dates?

My code is as follows:

<s:set name="currentDate"  value="%{test.currentDate}"/>
<s:set name="futureDate" value="2014-10-19"/>
<s:if test="%{#currentDate.before(#futureDate)}">
    <s:text name="test"/> <s:date name="test.currentDate" format="MM/yy"/> 
</s:if>
<s:else>
    <s:text name="test2"/>
</s:else>

Solution

  • In the above you were trying compare string with date object that's causing the problem. I suggest you to write a helper class to compare date and take the advantage of OGNL static method access. OGNLBasics-Accessingstaticproperties

        <s:set var="currentDate" value="%{new java.util.Date()}"/>
        <s:set var="futureDate" value="%{new java.util.Date()}"/>
        <s:property value="{#currentDate}"/>
        <s:property value="{#futureDate}"/>
        <s:if test="%{@com.mycompany.temp.strtus2.example.HelloWorld@compareDate(#currentDate, #futureDate)}">
            <div>Do your stuff</div>
        </s:if>
        <s:else>
            <div>else condition</div>
        </s:else>
    

    Util Class

    public static boolean compareDate(Date currentDate, Date futureDate) {
        boolean flag = false;
        if (removeTime(currentDate).equals(removeTime(futureDate))) {
            flag = true;
        } 
        return flag;
    }
    
    public static Date removeTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }