struts2: выбору тега не нравятся бины со свойством «параметры»? - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть базовый класс ReportElement, который имеет свойство type:

public abstract class ReportElement {
    private ReportElementType type;

    public ReportElementType getType() {
        return type;
    }

    public void setType(ReportElementType type) {
        this.type = type;
    }
}

ReportElementType - это просто перечисление с указанными свойствами code и i18nKey для каждого элемента.У меня есть пара подклассов ReportElement, каждый из которых представляет свои собственные свойства.Одним из них является Plot:

public class Plot extends ReportElement {
    public Plot() {
        setType(ReportElementType.PLOT);
    }

    private Collection<Parameter> parameters = new ArrayList<Parameter>();

    public Collection<Parameter> getParameters() {
        return parameters;
    }
}

На какой-то странице мне нужно было отобразить коллекцию различных ReportElement экземпляров, поэтому я просто использовал тэг выбора Struts2:

<s:select list="myElements" listKey="type.code" listValue="type.i18nKey" size="20"/>

Это сработалокак очарование для каждого элемента, за исключением Plot instaces.Вместо вызова getType().getCode() или getType().getI18nKey() plain toString() вызывался при каждом экземпляре Plot!После нескольких часов веселой отладки я заметил, что во время оценки тега вызывается метод Plot getParameters()!Так что, похоже, Struts пытался оценить type.code и type.i18nKey, используя метод getParameters()!В противном случае он игнорировал существование свойств, которые я четко указал для использования!

После переименования getParameters в нечетное имя, такое как getParamms, проблема исчезла.Кроме того, проблема не возникала при использовании тега итератора вместе с тегом свойства вместо тега select.

У кого-нибудь есть идея, ПОЧЕМУ структура Struts использует тег parameters моего компонента, когда я четко указал, чтосвойство должно быть использовано?Это какая-то "крутая" функция или ошибка?

PS Я использую распорки 2.2.3.1

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

Аргумент, используемый во всех шаблонах FreeMarker, представляющих параметры тега, называется parameters.Предоставляя свойство parameters, которое имеет приоритет, S2 не удалось добраться до объекта в стеке, содержащего параметры тега.

Это не крутая функция и не ошибка, это просто способ реализации шаблонов.Проверка источника шаблона может сэкономить несколько часов отладки.

0 голосов
/ 20 декабря 2011

Найдена соответствующая проблема в стойках JIRA: https://issues.apache.org/jira/browse/WW-3268

2.3 указана в качестве версии исправления.

...