2012-05-08 11 views
7

immediate="true", AJAXified JSF 2.0 bileşeniyle çalışırken asla kullanılmamalıdır?Hemen = "true", AJAXified JSF 2.0 bileşeniyle çalışırken asla kullanılmamalıdır?

örnek olabilir:

Ben kullanıcı vurursa, hiçbir doğrulamaları çalışmalıdır "İptal" nerede bir JSF 2.0 sayfa renkli "İptal" uygulamak istiyorsanız, ben mi bileşende immediate="true" set eğer o Ajaxified bir bileşen mi yoksa formdaki hiçbir bileşenin işlenmemesi gerektiğini belirtmeli mi? Öyleyse, immediate="true"'u kullanmanın "eski yolunu" değil, bileşenin AJAXified özelliklerini kullanarak bu işlevselliği uygulama yolu nedir?

cevap

10

Nitekim bir iptal butonuna immediate="true" kullanmanın amacı sadece aynı formda tüm giriş bileşenlerinin işlenmesi atlamak için (zaten varsayılan) execute="@this" ayarlayabilirsiniz <f:ajax> beri yararsız hale gelmiştir.

Yalnızca form önceden gönderilmiş, ancak bir dönüştürme/doğrulama hatası nedeniyle başarısız olduğunda sorunlarla karşılaşabilirsiniz. Eğer ajax tarafından iptal düğmesine basarsanız ve formu daha sonra açarsanız, girdiler hala geçersiz olarak işaretlenir ve model değerindeki herhangi bir değişiklik yansıtılmaz (muhtemelen entity = new Entity(); veya iptal işleminde bir şey eski formun değerleri). immediate="true" ile eşzamanlı (ajax olmayan) bir istek kullanırken bu sorun oluşmaz. Bu sorunun aslında immediate="true" ile alakası yok, ancak ajax isteklerinin JSF yaşam döngüsü ile. Temel olarak, ajax execute ajax render'da bulunan bileşenlere EditableValueHolder#resetValue() numaralı telefonu arayarak ilgili giriş bileşenlerinin geçersizleştirilmiş durumunu sıfırlamanız gerekir. OmniFaces'un tam olarak bu amaçla bir ResetInputAjaxActionListener vardır.