0

プロパティを持つ基本クラスReportElementがありtypeます:

public abstract class ReportElement {
    private ReportElementType type;

    public ReportElementType getType() {
        return type;
    }

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

ReportElementTypecode各要素に指定されたi18nKeyプロパティを持つ列挙型です。のサブクラスがいくつかありReportElement、それぞれが独自のプロパティを導入しています。それらの1つはプロットです:

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

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

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

一部のページでは、さまざまなインスタンスのコレクションを表示する必要があったReportElementため、struts2selectタグを使用しました。

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

これは、インスタレーションを除くすべての要素の魅力のように機能しPlotました。呼び出す代わりに、getType().getCode()またはgetType().getI18nKey()プレーンが!toString()のすべてのインスタンスで呼び出されました。Plot数時間の楽しいデバッグの後、タグ評価中にPlotgetParameters()メソッドが呼び出されることに気づきました。だから、ストラットは方法を評価type.codetype.i18nKeyて使用しようとしていたようgetParameters()です!それを怠ると、プロパティの存在が無視され、使用法を明確に指定しました。

問題がなくなったgetParametersような奇妙な名前に名前を変更した後。getParammsまた、selectタグの代わりにプロパティタグと一緒にイテレータタグを使用しても問題は発生していません。

どのプロパティを使用するかを明確に指定したのに、 struts selectタグparametersが私のBeanのプロパティを使用する理由を誰かが知っていますか?それはいくつかの「クールな」機能ですか、それともバグですか?

PS私は支柱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 に答える