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.
UICommand
ve UIInput
bileşenler bir UIForm
bileş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. UICommand
bileş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 .
UIForm
Birbirine birden çok bileşen yerleştiremezsiniz . Bu HTML'de yasa dışıdır. Tarayıcı davranışı belirtilmedi. Dahil dosyaları ile dikkat! UIForm
Bileş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 UIInput
değ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 id
ait <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 UICommand
veya UIInput
bileş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 value
istek 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 @PostConstruct
fasulyeye 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 UICommand
ya UIInput
bileş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 @PostConstruct
fasulyeye 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) .
rendered
Bileşen ve onun tüm velilerimize ve öznitelik test
herhangi ebeveynin öznitelik <c:if>
/ <c:when>
için değerlendirmek gerektiğini false
istek 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 @ViewScoped
fasulye veya düzgün koşulu preinitializing emin olduğunu yapma @PostConstruct
a @RequestScoped
düzeltmek gerekir fasulye. Aynısı disabled
, true
istek 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 UICommand
bileşeninin ve onsubmit
öznitelik UIForm
bileşeni dönmemesi false
veya 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 null
emin 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 .UIInput
UICommand
<f:ajax execute>
<p:commandXxx process>
Gönderilen değerler hala sona null
eriyorsa 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 UICommand
düğ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 render
bir <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 FacesServlet
irade 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 ActionEvent
bağımsız değişkenin 1. otomatik tamamlama seçeneği olarak önerdiği şey, ve bağımsız değişkeninin actionListener
bir javax.faces.event.ActionEvent
ve 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 action
bunun yerine kullanmak istersiniz actionListener
. Ayrıca bkz . Eylem ve eylemListener arasındaki farklar .
İstek yanıtlama zincirindeki hiçbir öğenin PhaseListener
veya herhangi EventListener
birinin 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 Filter
veya hiç bir şekilde Servlet
isteğ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:calendar
defaultLabel
rich: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 UICommand
bileş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.