struts2:选择标签不喜欢带有“参数”的bean财产?

发布于 2024-12-22 05:10:14 字数 1664 浏览 5 评论 0原文

我有一个基类 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 select 标签:

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

这对除 Plot< 之外的每个元素都起到了作用。 /code> 实例。在 < 的每个实例上调用普通的 toString(),而不是调用 getType().getCode()getType().getI18nKey()代码>情节!经过几个小时的有趣调试后,我注意到在标记评估期间 PlotgetParameters() 方法被调用!所以看来struts正在尝试使用getParameters()方法来评估type.codetype.i18nKey!如果不这样做,它就会忽略我已明确指定使用的属性的存在!

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

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

PS我使用struts 2.2.3.1

I have a base class ReportElement which has type property:

public abstract class ReportElement {
    private ReportElementType type;

    public ReportElementType getType() {
        return type;
    }

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

ReportElementType is just an enum with specified code and i18nKey properties for each element. I have a couple of subclasses of ReportElement, each of them introducing their own properties. One of them is Plot:

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

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

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

On some page I needed to display a collection of different ReportElement instances, so I just used struts2 select tag:

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

This worked like a charm for every element except for Plot instaces. Instead of invoking getType().getCode() or getType().getI18nKey() plain toString() was invoked on every instance of Plot! After several hours of fun debugging I noticed that during tag evaluation Plot's getParameters() method is called! So it seems struts was trying to evaluate type.code and type.i18nKey using getParameters() method! Failing to do that it ignored the existence of the properties, that I have clearly specified for usage!

After renaming getParameters to a kind of odd name like getParamms the problem gone. Also the problem hasn't occured when using iterator tag together with property tag instead of select tag.

Does anyone have an idea WHY struts select tag uses parameters property of my bean, when I have clearly specified what property should be used? Is it some "cool" feature or a bug?

P.S. I use struts 2.2.3.1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜巴黎 2024-12-29 05:10:14

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

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

The argument used in all the FreeMarker templates representing a tag's parameters is called parameters. By providing a parameters property that takes precedence, S2 was unable to get to the object on the stack containing the tag's parameters.

It's neither a cool feature nor a bug, it's just how the templates are implemented. Checking the template source may have saved the few hours of debugging.

晒暮凉 2024-12-29 05:10:14

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

2.3 被指定为修复版本。

Found corresponding issue in struts JIRA: https://issues.apache.org/jira/browse/WW-3268

2.3 is specified as fix version.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文