3

複合コンポーネントの属性 (インターフェースで定義されている) にアクセスするためのレイヤーとして、バッキング コンポーネントを使用したいと考えています。私が達成したかったのは、提供された属性のプロパティ値を返すバッキングコンポーネントクラスを介してコンポーネントの属性を読み取ることでした。

public String getName() {
    if (this.name == null) {
        this.name = getAttributes().get("name");
    }

    return this.name;
}

しかし、たとえば入力フィールドを介して新しい値を設定する場合、複合コンポーネントに属性引数として渡された元のプロパティの値を更新せずに、バッキング Bean プロパティ内にのみ値を格納したいと考えていました。

public void setName(final String name) {
    this.name = name;
}

私の問題は、バッキングコンポーネントのゲッターが初めて呼び出されたとき、または彼の人生の早い段階で、上記のゲッターのコードが getAttributes.get("name") のゲッターを呼び出すため、Stackoverflow 例外を引き起こすことです。複合コンポーネントに提供されたプロパティ/属性を取得する代わりに、バッキング コンポーネント (それ自体) を取得します。楽しい部分は、getAttributes() を呼び出す代わりに this.name のみを返す単純なゲッターを使用することです。そこにブレークポイントを設定し、(デバッガー経由で) getAttributes.get("name") を呼び出すと、オーバーフロー/独自のゲッターの呼び出しは発生しませんが、代わりに、複合コンポーネントに提供された属性が返されます。

バッキングコンポーネントと複合コンポーネントの間の結合に関係があると思います。ゲッターが初めて呼び出されたとき、それらの間の結合は与えられないため、 getAttributes.get("name") の呼び出しはバッキングコンポーネントのゲッターを呼び出しますが、後で呼び出しは独自のゲッターを呼び出しませんが、代わりにcomp コンポーネントに提供された属性をフェッチします。

誰でもこの問題を解決する方法を知っていますか? 事前にt​​hnx。

4

1 に答える 1