【问题标题】:struts2: select tag doesn't like beans with "parameters" property?struts2:选择标签不喜欢具有“参数”属性的bean?
【发布时间】:2011-12-20 09:17:35
【问题描述】:

我有一个基类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 instaces 之外的每个元素都很有效。不是调用getType().getCode()getType().getI18nKey(),而是在Plot 的每个实例上调用普通toString()!经过几个小时有趣的调试,我注意到在标签评估期间PlotgetParameters() 方法被调用了!所以似乎 struts 试图使用getParameters() 方法评估type.codetype.i18nKey!如果不这样做,它会忽略我已明确指定使用的属性的存在!

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

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

附:我使用struts 2.2.3.1

【问题讨论】:

    标签: properties struts2 tags ognl


    【解决方案1】:

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

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

    【讨论】:

    • 是的,戴夫,我已经检查过了。那么有什么方法可以在不修改 bean 的方法名称的情况下纠正这个问题?
    • @pavel_kazlou 想了想,没有创建自己的主题并重命名所有模板中的所有内容,我没有快速的解决方案。
    【解决方案2】:

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

    2.3 被指定为修复版本。

    【讨论】:

    • 仅供参考,我已经关闭了您的重复票证。如果您有其他信息要添加到existing ticket,请在评论中添加。
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多