Struts 2: s: если внутри s: итератор не работает - PullRequest
1 голос
/ 30 августа 2011

У меня вопрос по поводу распорок 2 и s: метки if. Согласно описанию в документации s: если следующий пример должен был работать:

...
<s:iterator value="questao.alternativas" status="alternativa">
    <tr>
        <td>
            <s:if test="#alternativa.correta == true">Correta!</s:if>
        </td>
    </tr>
</s:iterator>
...

Но это не работает в моем случае, не могли бы вы помочь? Подробнее:

Questao.alternativas найден в действии, и он отлично работает, все «alternativas» «повторяются»!

метод getCorreta () никогда не вызывается в примере, описанном выше.

при использовании значения true печатается.

Есть идеи?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Указание тега status в iterator приведет к отправке экземпляра IteratorStatus в стек значений.Вам нужно обратиться к документации IteratorStatus для правильного использования атрибутов, а correta не является допустимым атрибутом.Если вы хотите получить доступ к объекту текущей итерации, укажите вместо него атрибут var.

Редактируйте для комментария:
Это верно, поскольку Quaternion сказал, что вам не нужно указывать var для доступа к объекту текущей итерации.Это уже на вершине стека значений.

0 голосов
/ 04 сентября 2011

Быстро просматривая ваш код, я вижу, что вы ссылаетесь на статус в вашем условном (если) утверждении.Ваше условное выражение должно напрямую ссылаться на метод доступа объекта в списке, через который вы перебираете, например:

<s:iterator value="questao.alternativas" status="stat">
    <tr>
        <td>
            // If correta is a boolean value, there is not need to use an 
            // == operator at all
            <s:if test="%{correta}">
                Correta!
            </s:if>
        </td>
    </tr>
</s:iterator>

Когда итератор пересекает предоставленный список, предполагая, что Questao.alternativas является списком объектов с средством доступаметоды, вы напрямую ссылаетесь на методы внутри вашего итератора.

Статус в итераторе дает вам доступ к позиции итератора.Например, если вы хотите определить, находится ли ваш цикл на последнем элементе в списке для выполнения чего-то особенного, вы должны сделать что-то вроде:

<s:if test="%{#stat.last}">--- END OF LIST ---</s:if>

Или получить индексированную позицию текущего элемента в вашеммассив или список:

<s:property value=%{#stat.index} />
...