Как преобразовать этот Struts2 в displaytag (сравнение дат)

У меня был код Struts2 для отображения кнопки на основе результата сравнения дат, подобного этому (обратите внимание, что это упрощенный пример того, что у меня есть на самом деле):

<s:iterator value="myList">
    <s:if test="%{getDate().compareTo(getNow()) > 0}">
        // Show the item
    </s:if>
</s:iterator>

С тех пор я преобразовал отображение набора результатов, чтобы использовать displaytag. Как бы я сделал это, используя тег отображения. Это то, что я пробовал.

<display:table name="myList" pagesize="50" id="row">
    <display:column title="Item">
        <s:if test="%{#attr.row.endDt.compareTo(#attr.row.now()) > 0}"><%--does NOT work--%>
    </display:column>
</display:table>

Каков правильный синтаксис оператора <s:if>?
Или это нельзя сделать с помощью displaytag + Struts2?


person nmc    schedule 03.12.2012    source источник
comment
Учитывая, что вы используете getDate().compareTo(getNow()) > 0 в первом рабочем выражении, пробовали ли вы #attr.row.getDate().compareTo(#attr.row.getNow()) > 0? Мне это кажется более логичным.   -  person JB Nizet    schedule 04.12.2012
comment
@JBNizet Я даже не думал об этом! Но, к сожалению, не совсем получилось.   -  person nmc    schedule 04.12.2012


Ответы (3)


Использование #attr.row в качестве индекса для ссылки на элемент в списке должно работать:

<display:table name="myList" pagesize="50" id="row">
    <display:column title="Item">
        <s:if test="myList[%{#attr.row_rowNum - 1}].endDt.compareTo(myList[%{#attr.row_rowNum - 1}].now()) > 0}">
           <span>Let's rock</span>
        </s:if>
    </display:column>
</display:table>

Примечание: является ли getNow() функцией повторяющегося объекта?

Мне это кажется странным, разве это не должна быть обычная функция из baseAction из примера?

person Andrea Ligios    schedule 04.12.2012
comment
Спасибо за ответ, но у меня не совсем сработало. getnow на самом деле не является свойством bean-компонента, но исходит из класса Action, из baseAction, как вы сказали. - person nmc; 04.12.2012

Другой способ - использовать декоратор displaytag.

 public String getLink()
 {
    YourObject yourObject = (YourObject) getCurrentRowObject();
    //Do your checks....
    return "<a href="#">your link</a>";

 }
person Atropo    schedule 04.12.2012

Вероятно, есть несколько решений, но это сработало для меня:

<display:table name="myList" pagesize="50" id="row">
    <display:column title="Item">
        <s:set name="endDt" value="#attr.row.endDt"/>
        <s:set name="now" value="now" />
        <s:if test="%{#endDt.compareTo(#now) > 0}">
           <span>w00 h00!</span>
        </s:if>
    </display:column>
</display:table>
person nmc    schedule 04.12.2012