ayrıca tarayıcının JavaScript konsolunda googlable hatalar ve / veya uyarılar görmüyorsunuz (web geliştirici araç setini açmak ve ardından Konsol sekmesini açmak için Chrome / Firefox23 + / IE9 + 'da F12 tuşuna basın ), ardından aşağıdaki olası nedenler listesini inceleyin.
UICommandve UIInputbileşenler bir UIFormbileşenin içine yerleştirilmelidir , örneğin <h:form>(ve böylece düz HTML değil <form>), aksi takdirde sunucuya hiçbir şey gönderilemez. UICommandbileşenler de type="button"özniteliğe sahip olmamalıdır , aksi takdirde yalnızca JavaScript için yararlı olan ölü bir düğme olacaktır onclick. Ayrıca bkz. Form giriş değerleri gönderme ve JSF çekirdeğinde bir yöntem çağırma ve <h: commandButton> bir geri gönderme başlatmaz .
UIFormBirbirine birden çok bileşen yerleştiremezsiniz . Bu HTML'de yasa dışıdır. Tarayıcı davranışı belirtilmedi. Dahil dosyaları ile dikkat! UIFormBileşenleri paralel olarak kullanabilirsiniz , ancak gönderme sırasında birbirlerini işlemezler. Ayrıca "Tanrı Formu" antipatterniyle dikkat etmelisiniz; diğer tüm (görünmez) girişleri aynı formda istemeden işleme / doğrulamadığınızdan emin olun (örneğin, aynı formda gerekli girişleri içeren gizli bir iletişim kutusuna sahip olmak). Ayrıca bkz . JSF sayfasında <h: form> nasıl kullanılır? Tek form mu? Birden çok form? Yuvalanmış formlar? .
Hiçbir UIInputdeğer doğrulama / dönüştürme hatası oluşmamış olmalıdır. <h:messages>Girişe özgü herhangi bir <h:message>bileşen tarafından gösterilmeyen mesajları göstermek için kullanabilirsiniz . Eklemeyi unutmayın idait <h:messages>içinde <f:ajax render>iyi ajax istekleri olarak güncellenecektir böylece varsa. Ayrıca bkz . P: commandButtonuna basıldığında h: mesajları mesaj göstermez .
Eğer UICommandveya UIInputbileşenlerin bir yineleme bileşeni içine yerleştirilir gibi <h:dataTable>, <ui:repeat>vb, o zaman bu tam olarak aynı sağlamak için gereken valueistek gönderin formun isteği değerleri aşamasını uygulamak sırasında korunmuştur edilir ilerlerken bileşeninin. JSF, tıklanan bağlantıyı / düğmeyi ve gönderilen giriş değerlerini bulmak için tekrar eder. Fasulyeyi görünüm kapsamına koymak ve / veya veri modelini @PostConstructfasulyeye yüklediğinizden emin olmak (ve böylece bir alıcı yönteminde değil!) Düzeltmelidir. Ayrıca bkz . H: dataTable için modeli veritabanından nasıl ve ne zaman yüklemeliyim .
Eğer UICommandya UIInputbileşenler gibi dinamik bir kaynak tarafından dahil edilmiştir <ui:include src="#{bean.include}">, o zaman tam olarak aynı olmasını sağlamak için gereken #{bean.include}değer formunun görünümü oluşturma zaman isteği gönderirim sırasında korunur. JSF, bileşen ağacını oluştururken yeniden uygulayacaktır. Fasulyeyi görünüm kapsamına koymak ve / veya veri modelini @PostConstructfasulyeye yüklediğinizden emin olmak (ve böylece bir alıcı yönteminde değil!) Düzeltmelidir. Ayrıca bkz . Gezinme menüsüne göre dinamik içerik ekleme ajax nasıl yenilenir? (JSF SPA) .
renderedBileşen ve onun tüm velilerimize ve öznitelik testherhangi ebeveynin öznitelik <c:if>/ <c:when>için değerlendirmek gerektiğini falseistek gönderin formun isteği değerleri aşamasını uygulamak sırasında. JSF, tahrif / saldırıya uğramış isteklere karşı korumanın bir parçası olarak yeniden kontrol edecektir. Bir de durum için değişkenler sorumlu saklama @ViewScopedfasulye veya düzgün koşulu preinitializing emin olduğunu yapma @PostConstructa @RequestScopeddüzeltmek gerekir fasulye. Aynısı disabled, trueistek değerleri uygulama aşamasında değerlendirilmemesi gereken bileşenin niteliği için de geçerlidir . Ayrıca bkz. JSF KomutDüğmesi eylemi çağrılmadı , koşullu olarak oluşturulan bileşende Form gönderme işlenmiyor veh: commandButton, <h: panelGroup rendered> öğesine kaydırdığımda çalışmıyor .
onclickÖznitelik UICommandbileşeninin ve onsubmitöznitelik UIFormbileşeni dönmemesi falseveya bir JavaScript hatası neden olur. Durumunda Orada gerektiğini <h:commandLink>ya <f:ajax>da tarayıcının JS konsolunda görünür hiçbir JS hatalar olabilir. Genellikle tam hata mesajını googling size zaten cevap verecektir. Ayrıca bkz . PrimeFaces ile jQuery'nin manuel olarak eklenmesi / yüklenmesi Uncaught TypeErrors ile sonuçlanır .
Ajax'ı JSF 2.x <f:ajax>veya örn. PrimeFaces ile kullanıyorsanız <p:commandXxx>, <h:head>ana şablonda <head>. Yerine bir Aksi takdirde JSF, Ajax işlevlerini içeren gerekli JavaScript dosyalarını otomatik olarak ekleyemez. Bu, tarayıcının JS konsolunda "mojarra tanımlanmadı" veya "PrimeFaces tanımlanmadı" gibi bir JavaScript hatasına neden olur. Ayrıca bkz. H: commandLink eylem listesi, f: ajax ve ui: repeat ile birlikte kullanıldığında çağrılmaz .
Ajax kullanıyorsanız ve gönderilen değerler sonuçlanırsa , ilgilenilen ve bileşenlerinin veya örneğinin kapsadığından nullemin olun , aksi takdirde yürütülmez / işlenmez. Ayrıca , <h: commandButton> öğesine <f: ajax> eklenirken ve PrimeFaces işlem / güncellemesini ve JSF f: ajax yürütme / oluşturma niteliklerini anlama sırasında modelde güncellenmeyen Gönderilen form değerleri konusuna bakın .UIInputUICommand<f:ajax execute><p:commandXxx process>
Gönderilen değerler hala sona nulleriyorsa ve çekirdekleri yönetmek için CDI kullanıyorsanız, kapsam ek açıklamasını doğru paketten içe aktardığınızdan emin olun, aksi takdirde CDI @Dependent, EL'in her bir değerlendirmesinde çekirdeği etkili bir şekilde yeniden oluşturur. ifadesi. Ayrıca bkz. @SessionScoped fasulye kapsamı kaybeder ve her zaman yeniden yaratılır, alanlar null olur ve JSF 2 uygulamasında varsayılan Yönetilen Fasulye Kapsamı nedir?
Bir ebeveyn Eğer <h:form>ile UICommanddüğmeye önceden render edilmiş olup / aynı sayfada başka bir formda gelen bir ajax isteği ile güncellenen sonra ilk hareketin, JSF 2.2 veya daha eski başarısız olur. İkinci ve sonraki eylemler işe yarayacaktır. Bu durum, JSF spec sorunu 790 olarak bildirilen ve şu anda JSF 2.3'te düzeltilen görünüm durumu işlemedeki bir hatadan kaynaklanmaktadır . Eski JSF sürümleri için açıkça kimliğini belirtmeniz gerekir <h:form>içinde renderbir <f:ajax>. Ayrıca bkz. H: commandButton / h: commandLink ilk tıklamada çalışmaz, yalnızca ikinci tıklamada çalışır .
Eğer <h:form>gelmiştir enctype="multipart/form-data"destek dosya yükleme için ayarlanmış, o zaman, aksi azından JSF 2.2 kullanarak veya çok parçalı / form-data isteklerini ayrıştırma sorumludur servlet filtre düzgün yapılandırılmış olduğunu emin olun gerekir FacesServletirade sonuçta hiçbir istek parametresi almaz ve böylece istek değerlerini uygulayamaz. Böyle bir filtrenin nasıl yapılandırılacağı, kullanılan dosya yükleme bileşenine bağlıdır. Tomahawk için bu yanıtı<t:inputFileUpload> kontrol edin ve PrimeFaces için bu yanıtı kontrol edin . Veya aslında bir dosya yüklemiyorsanız, bu özelliği tamamen kaldırın.<p:fileUpload>
Çoğu ActionEventbağımsız değişkenin 1. otomatik tamamlama seçeneği olarak önerdiği şey, ve bağımsız değişkeninin actionListenerbir javax.faces.event.ActionEventve dolayısıyla olmadığından emin olun java.awt.event.ActionEvent. Eğer kullanırsanız, hiçbir tartışmaya sahip olmak da yanlıştır actionListener="#{bean.method}". Yönteminizde bağımsız değişken istemiyorsanız kullanın actionListener="#{bean.method()}". Ya da aslında actionbunun yerine kullanmak istersiniz actionListener. Ayrıca bkz . Eylem ve eylemListener arasındaki farklar .
İstek yanıtlama zincirindeki hiçbir öğenin PhaseListenerveya herhangi EventListenerbirinin JSF yaşam döngüsünü değiştirmediğinden emin olun, örneğin çağırma eylemi aşamasını atlamak FacesContext#renderResponse()veya FacesContext#responseComplete().
Aynı istek-yanıt zincirinde Filterveya hiç bir şekilde Servletisteği engellemediğinden emin olun FacesServlet. Örneğin, Spring Security gibi giriş / güvenlik filtreleri. Özellikle varsayılan olarak hiçbir kullanıcı arayüzü geri bildirimi olmadan kullanılacak ajax isteklerinde. Ayrıca bkz. Spring Security 4 ve PrimeFaces 5 AJAX istek işleme .
Bir PrimeFaces <p:dialog>veya a kullanıyorsanız <p:overlayPanel>, kendilerine ait olduklarından emin olun <h:form>. Çünkü, bu bileşenler varsayılan olarak HTML'nin sonuna taşınan JavaScript'tir <body>. Yani, eğer başlangıçta a'nın içinde oturuyorlarsa <form>, artık a <form>. Ayrıca bkz. P: komut düğmesi eylemi p: iletişim kutusunun içinde çalışmıyor
Çerçeve hata. Örneğin, bir özniteliğe sahip bir UI öğesi (veya bazı durumlarda bir alt öğe) kullanılırken RichFaces bir " dönüştürme hatası " na sahiptir . Bu hata, takvim tarihi için herhangi bir değer ayarlanmadığında fasulye yönteminin çağrılmasını önler. İzleme çerçevesi hataları, basit bir çalışma örneğiyle başlayarak ve hata bulunana kadar sayfayı yedekleyerek gerçekleştirilebilir.rich:calendardefaultLabelrich:placeholder
Hala takılırsanız, hata ayıklama zamanı. İstemci tarafında, web geliştirici araç setini açmak için web tarayıcısında F12 tuşuna basın. Konsol sekmesini tıklayın, böylece JavaScript conosle'a bakın. Herhangi bir JavaScript hatası içermemelidir. Aşağıdaki ekran görüntüsü, Chrome'dan bildirilmeden <f:ajax>etkin bir düğmenin gönderilme durumunu gösteren bir örnektir <h:head>(yukarıdaki 7. maddede açıklandığı gibi).
Sunucu tarafında, sunucunun hata ayıklama modunda başlatıldığından emin olun. Form gönderme işlemi sırasında çağrılmasını beklediğiniz ilgilenen JSF bileşeninin bir yöntemine bir hata ayıklama kesme noktası koyun. Örneğin, bir UICommandbileşen söz UICommand#queueEvent()konusu olduğunda, ve bu bileşen söz konusu olduğunda UIInput, söz konusu olabilir UIInput#validate(). Sadece kod yürütme adım adım ve akış ve değişkenlerin beklentilere göre olup olmadığını kontrol edin. Aşağıdaki ekran görüntüsü Eclipse'in hata ayıklayıcısından bir örnektir.