nitelik ayarlayıcı tetiklemez : Ben kullanırsanızMTU 2 özel bileşenler Ben etiketi şöyle</p> <p>JSF 2.0 özel bir bileşen oluşturmak zorunda
@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" />
her şey beklendiği gibi çalışır, ancak myTag öznitelikleri için EL kullanırken setName()
yöntemi hiçbir zaman aranmaz.
<x:myTag id="#{dummyBean.id}" name="#{dummyBean.name}" />
, Yani hep encodeBegin
yöntemi içinde name
özellik için null
olsun. Hata ayıkladıktan sonra, setName
yönteminin hiçbir zaman çağrılmadığını fark ettim. Belki de EL ile ilgili bir şeyleri (belki de bunun sebebinin bununla bağlantılı olduğuna inanıyorum) bir şeyler düşündüğünü düşünmüştüm, ama gerçekten garip olan şu ki id
özelliğinin iyi çalışması: setterin çağrılması ve değer değiştiğinde beklenen değerdir. başlar.
encodeBegin
yönteminden getAttributes().get("name")
yöntemini çağırırsam, doğru ad değerini aldığımı, ancak bunun neden alıcı ve ayarlayıcı ile çalışmadığını merak ettiğimi belirtmeliyim.
Bileşenimde eksik olan herhangi bir fikir var mı?
Cevabınız için teşekkürler! Bileşenimin içindeki farklı öznitelik değerleri arasında ayrım yapmak için bazı özel yöntemler uygulamak zorunda mıyım diye sormak istiyorum. (UIComponentBase'in kendi başına ele aldığını anladım) Ve eğer evet ise, bunu yapmak için en iyi uygulama var mı ?! – RaresI
Hayır ve genel olarak umurumda değil.(Değerlendirilen) öznitelik değerini almak için, yalnızca alıcıyı çağırınız. – BalusC