我有一个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
,每个子类都引入了自己的属性。其中之一是情节:
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()
Plot
Plot
getParameters()
type.code
type.i18nKey
getParameters()
重命名getParameters
为一种奇怪的名字getParamms
后问题就消失了。当使用迭代器标签和属性标签而不是选择标签时,也没有出现问题。
parameters
当我明确指定应该使用什么属性时,有谁知道为什么 struts select 标签使用我的 bean 的属性?它是一些“酷”的功能还是错误?
PS我使用struts 2.2.3.1