Java Tapestry: очистка значения счетчика после a t:if test

Я печатаю первые 12 элементов массива комментариев. После того, как были напечатаны 12, печатается ссылка "Еще". Я делаю это, используя COMMENT_COUNT int, и повторяю его для каждого напечатанного комментария. Я хочу вернуть значение COMMENT_COUNT в 0 после того, как будет напечатана ссылка "Еще".

Я оставил свой текущий хак на месте, в котором я просто вызываю ${clearCount()} после печати ссылки "Еще". Теперь происходит то, что печатаются 12 комментариев, затем печатается ссылка "БОЛЕЕ", а затем печатается логическое значение "true".

Я предполагаю, что есть намного лучший способ сделать это. Я ищу лучший способ вызова ${clearCount()} или лучший способ установить значение COMMENT_COUNT в 0 после печати ссылки "Еще".

--- отредактировано, чтобы добавить ----

Дополнительным требованием является то, что COMMENT_COUNT считает только первые 12 видимых комментариев (комментарии могут быть видимыми или нет в зависимости от пользователя), поэтому имейте несколько уродливых вложенных операторов if:

.tml:

<t:loop source="currentCategoryTextmedium.commentArraySorted" value="currentComment">
 //test if the current comment should be visible
 <t:if test="isCurrentCommentVisible()">         
    <t:if test="isCommentLessThan12()">
    //print first 12 visible comments
        <span>
            <a blah blah>${currentComment.blahblah}</a>
        </span>
    </t:if>     
  </t:if>                                                           
</t:loop>

<t:if test="isCommentMoreThan12()">
    //print one More link
    <span>
        <a "blah blah">MORE</a>
    </span>
</t:if>

//Clear the COMMENT_COUNT so that the right number of comments print on another element
${clearCount()}

Джава:

public int COMMENT_COUNT; 

public boolean isCommentLessThan12() {
    if (COMMENT_COUNT < 12) {
        COMMENT_COUNT++;
        return true;
    }
    else {
    return false;
    }
}
public boolean isCommentMoreThan12() {
    COMMENT_COUNT++;
    if (COMMENT_COUNT > 12) {
        return true;
    }
    else {
    return false;
    }
}

public boolean clearCount() {
    COMMENT_COUNT= 0;
    return true;
}

1 ответ

Это какой-то чертовски уродливый код!!! Попробуй это:

TML

<t:loop source="topComments" value="currentComment">         
    <span>
        <a blah blah>${currentComment.blahblah}</a>
    </span>
</t:if>                                                                 
<t:if test="moreComments">
    <span>
        <a "blah blah">...</a>
    </span>
</t:if>

Джава

@Property
private List<Comment> topComments;

@Property
private boolean moreComments;

@Property(write=false)
private SomeType currentCategoryTextmedium;

// custom setter to initialize
public void setCurrentCategoryTextmedium(SomeType current) {
    topComments = getFirst12(current.getCommentArraySorted());
    moreComments = isMoreThan12(topComments, current.getCommentArraySorted());
    currentCategoryTextmedium = current;
}
Другие вопросы по тегам