2013-05-31 23 views
6

Hey Elimde bir değişiklik olayının tetiklenmesiyle ilgili bir sorunum var.Yangın değiştirme olayı elle

Bu yüzden selectOneMenu'yu (jsf'de bir açılır kapanış gibi) farklı değerlere sahibim.

Bu açılır listenin bir değerini seçersem, bir veri tabanı güncelleştirilmelidir. Bu değeri el ile seçerseniz, bu doğru çalışır.

Şimdi selectOneMenu'ya yeni bir değer eklemem gereken bir durum var. Bu yeni değer otomatik olarak seçilir, ancak veri tabanını güncellemek için değişiklik olayı tetiklenmez ...

Temel olarak, daha sonra seçili olan selectOneMenu'ya yeni bir değer kaydetmek için bu düğmeye sahibim. fonksiyonu, ben birkaç farklı şeyler denedim - fireChange() için

<p:commandButton ajax="true" id="seatingPlanSave" actionListener="#{EventAssistentController.createSeatingPlan}" value="#{msg.save}" update=":createEvent:EventSeatingPlan, :createEvent:ticketTypePrices" oncomplete="fireChange()"/> 

: Datatable ben fonksiyonu fireChange() yazmaya çalıştı ve düğmeye onComplete verdiğinibiliyor neden olan güncellenmiş almaz :

Ancak bunlardan hiçbiri çalışmaz :(

Bunu nasıl başarabileceğimi söyleyebilir misiniz? bu bizim için zorunlu iken

sayesinde Xera

cevap

5

Sen createEvent:EventSeatingPlan_input HTML gösterimi hakkında bir şey söylemedi (ve sizin!) bu konuda JS kesenini izin nasıl bilmek için. <h:selectOneMenu> veya <p:selectOneMenu>'u kullanıp kullanmadığınızı söylemediniz. Bu nedenle, kendimize oluşturulan HTML temsiline bakamayız. Birincisi bir <select><option> üretir, ikincisi ise bir <select><option> gizli bir ile etkileşime giren bir <div><ul><li> üretir. Açılır menülerin her ikisi de JS'de farklı bir yaklaşım gerektirir. Ayrıca, change olay işleyicisi işlevini kaydetme hakkında bilgi zorunludur. onchange özniteliğini sabitleyerek veya <f:ajax> veya <p:ajax>'u ekleyerek mi? Bugüne kadar sağlanan bilgilere dayanarak herhangi bir şekilde

, ben bir <select onchange="..."><option> üretecektir bir

<h:selectOneMenu ...> 
    <f:ajax render="dataTableId" /> 
</h:selectOneMenu> 

getirdiğiniz tahmin edersiniz. İlk denemede gereğince

: Bu <h:selectOneMenu>HTMLSelectElement çünkü arabirimde başarısız olur

function fireChange() { 
    var element = document.getElementById("createEvent:EventSeatingPlan_input"); 
    element.change(); 
} 

bir change özelliği ne de yöntem yoktur. Bunun yerine, () ekleyerek doğrudan çağrılabilen bir olay işleyicisini döndüren onchange özelliğidir.

şu <h:selectOneMenu> üzerinde çalışacak:

function fireChange() { 
    var element = document.getElementById("createEvent:EventSeatingPlan_input"); 
    element.onchange(); 
} 

Ancak bir HTMLDivElement yerine HtmlSelectElement döndürdüğü için, <p:selectOneMenu> başarısız sırayla bu irade.HTMLDivElement, bir olay işleyicisini döndüren bir onchange özelliğine sahip değil. Belirtildiği gibi, <p:selectOneMenu>, bir gizli <select><option> ile etkileşime giren bir <div><ul><li> widget'ı oluşturur. Bu widget'i JS bağlamında kaydettirmeli ve özel triggerChange() yöntemini kullanmalısınız.

Yani, bir

<p:selectOneMenu widgetVar="w_menu" ...> 
    <p:ajax update="dateTableId" /> 
</p:selectOneMenu> 

bu Vay size bu büyük yanıt için çok teşekkür ederim

function fireChange() { 
    w_menu.triggerChange(); 
} 
+0

yapmalıyım verilen! Bir kullanıyorum ve widgetVar ve özel triggerChange-Method ile önerdiğiniz gibi şimdi mükemmel çalışıyor :-) Tekrar teşekkürler ve iyi günler – xeraphim