Soru JSF bileşenini bir JSF arka fasulye yönteminden güncelleyebilir miyim?


JSF Backing bean'ın sayfada bir bileşen güncellemesine neden olması için bir yol var mı? Sayfadaki bir bileşeni güncellemek için güncelleme özniteliğine sahip bir ajax bileşeni kullanmak istemiyorum. JSF destekli fasulye yönteminden bir güncellemeyi tetiklemem gerekiyor. Sayfadaki güncellemenin, bu yöntemin tamamlanmasından veya tamamlanmasından sonra gerçekleşebileceğini unutmayın. PrimeFaces kullanmanın bir çözümü varsa, PrimeFaces kullanıyorum.


76
2017-07-06 15:22


Menşei


Doğrulama hatasını tetikleyebilir: stackoverflow.com/a/14401741/1599699 - Andrew


Cevaplar:


Standart JSF API'sini kullanarak müşteri kimliğini PartialViewContext#getRenderIds().

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");

PrimeFaces'a özgü API'yi kullanma RequestContext#update().

RequestContext.getCurrentInstance().update("foo:bar");

JSF yardımcı program kitaplığını kullanırsanız OmniFaces, kullan Ajax#update().

Ajax.update("foo:bar");

Her ne olursa olsun, bu müşteri kimlikleri, mutlak müşteri kimliklerini temsil etmelidir. değil ile önekli NamingContainer Görünüm tarafında olduğu gibi ayırıcı karakteri.


140
2017-07-06 17:51



Render Response (Çalışma Tepkisi) aşamasında (bu maalesef bu kodu yerleştirmek zorunda kaldığım mahalde) bu işi yapamayacağımı düşünüyorum. Uygulamayı veya önceki aşamaları yerleştirirseniz işler iyi çalışır. Render Response aşamasında olmak için herhangi bir geçici çözüm var mı? - BestPractices
Hayır, çok geç. Eylem aşamasını çağırmak veya yanıtlama aşamasını işlemeye başlamak için işi taşıyın. Yöntemi <f:ajax listener> veya <f:event type="preRenderView" listener> - BalusC
JSF 1.2 ile nasıl yapılacağı hakkında bir fikrin var mı? Cevabın çok uzun / karmaşık olması durumunda yeni bir soru sorabilirim. - RinaldoPJr
@RinaldoPJr: JSF 1.2'nin bir konsepti yok <f:ajax>. Bu JSF 2.0 beri tanıtıldı. JSF 1.2 bileşen kitaplığına özel olanaklara başvurmanız gerekir. - BalusC
@DanielK: Hiçbir fikrim yok. Ben Trinidad'yı yapmam. Eğer hala Trinidad yolunu anlayamıyorsanız standart JSF API yaklaşımını kullanın. - BalusC


Ayrıca, jsf destekli fasulye / sınıfından bir bileşeni güncellemeye çalıştım.

Kullanıcı Arabirimi bileşenini işledikten sonra aşağıdakileri yapmanız gerekir:

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())

(Sunucu tarafı) componentId yerine clientId kullanmak önemlidir!


6
2017-07-02 10:48





RequestContext olduğu kullanımdan kaldırıldı itibaren Primefaces 6.2. Bu versiyondan aşağıdakileri kullanın:

if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
    PrimeFaces.current().ajax().update(componentID);
}

Ve yürütmek için javaScript backbean bu şekilde kullanır:

PrimeFaces.current().executeScript(jsCommand);

Referans:


1
2018-06-07 19:28