0

我有一个ReportElement具有type属性的基类:

public abstract class ReportElement {
    private ReportElementType type;

    public ReportElementType getType() {
        return type;
    }

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

ReportElementType只是一个枚举,每个元素都有指定codei18nKey属性。我有几个 的子类ReportElement,每个子类都引入了自己的属性。其中之一是情节:

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有效。在!的每个实例上都调用而不是调用getType().getCode()getType().getI18nKey()plain 经过几个小时有趣的调试后,我注意到在 tag evaluation的方法被调用了!所以看来struts是在尝试评估和使用方法!如果不这样做,它会忽略我已明确指定使用的属性的存在!toString()PlotPlotgetParameters()type.codetype.i18nKeygetParameters()

重命名getParameters为一种奇怪的名字getParamms后问题就消失了。当使用迭代器标签和属性标签而不是选择标签时,也没有出现问题。

parameters当我明确指定应该使用什么属性时,有谁知道为什么 struts select 标签使用我的 bean 的属性?它是一些“酷”的功能还是错误?

PS我使用struts 2.2.3.1

4

2 回答 2

2

在所有代表标签参数的 FreeMarker 模板中使用的参数称为parameters. 通过提供parameters优先属性,S2 无法访问堆栈上包含标签参数的对象。

这既不是一个很酷的功能也不是一个错误,它只是模板的实现方式。检查模板源可能节省了几个小时的调试时间。

于 2011-12-20T12:26:46.260 回答
0

在 struts JIRA 中找到相应的问题:https ://issues.apache.org/jira/browse/WW-3268

2.3 被指定为修复版本。

于 2011-12-20T12:36:17.383 回答