属性セッターをトリガしません。 :私が使用している場合JSF 2カスタムコンポーネントは、私は、タグは次のようになり</p> <p>JSF 2.0でカスタムコンポーネントを構築してい
@FacesComponent("a.b.c.MyTag")
public class UIMyTag extends UIInput {
private String name;
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void encodeBegin(FacesContext context) throws IOException {
ResponseWriter writer = context.getResponseWriter();
logger.debug(getName()); //prints null for name="#{dummyBean.name}"
// and AAA for name="AAA"
logger.debug(getAttributes().get("name")); // always correct value
...
}
....
}
<x:myTag id="1" name="AAA" />
すべてが正常に動作しますが、ELをmyTag属性に使用すると、setName()
メソッドが呼び出されることはありません。
<x:myTag id="#{dummyBean.id}" name="#{dummyBean.name}" />
、のためので、私はいつも私のencodeBegin
メソッド内name
プロパティのnull
を取得します。デバッグ後、私はsetName
メソッドが呼び出されないことに気付きました。私はELのことを考えているかもしれないと思っていましたが(そして私はまだその理由がそれに関係していると信じています)、本当に変わったのは、id
のプロパティがうまくいきます。セッターが呼び出され、開始されます。
encodeBegin
メソッドからgetAttributes().get("name")
を呼び出すと、正しい名前の値が得られますが、なぜそれがgetterとsetterで機能しないのか興味があります。
私のコンポーネントには何が欠けていますか?
ありがとうございます!私は、私のコンポーネント内のさまざまなタイプの属性値を区別するための特別なメソッドを実装する必要があるかどうかを質問したいと思います。 (私はUIComponentBaseがそれを独自に処理することを理解しました)そして、もしそうなら、それを行うベストプラクティスはありますか? – RaresI
いいえ、一般的には気にしないでください。(評価された)属性値を取得するには、単にゲッターを呼び出します。 – BalusC