commandButton / commandLink / ajax işlemi / dinleyici yöntemi çağrılmadı veya giriş değeri ayarlanmadı / güncellenmedi


345

Kullanırken Bazen <h:commandLink>, <h:commandButton>ya <f:ajax>, action, actionListenerveya listeneretiketle ilişkili yöntem basitçe çağrılan edilmiyor. Veya, çekirdek özellikleri gönderilen UIInputdeğerlerle güncellenmez .

Bunun olası nedenleri ve çözümleri nelerdir?

Yanıtlar:


687

Giriş

Bir zaman UICommandbileşen ( <h:commandXxx>, <p:commandXxx>, vs) ilgili eylem yöntemini veya bir çağırmak başarısız UIInputbileşeni ( <h:inputXxx>, <p:inputXxxx>vb) gönderilen değerleri işlemek ve / veya model değerlerini güncellemek için başarısız olur ve herhangi googlable istisnalar göremiyoruz ve / veya sunucu günlüğünde uyarılar, ayrıca uygun olarak bir ajax durum işleyici yapılandırmak değilken MTU ajax istekleri işleme istisna , ne de bağlam parametrenin altında ayarlandığında web.xml,

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

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.

Olası nedenler

  1. 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 .

  2. 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? .

  3. 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 .

  4. 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 .

  5. 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) .

  6. 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 .

  7. 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 .

  8. 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 .

  9. 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>

  10. 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?

  11. 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 .

  12. 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>

  13. Ç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 .

  14. İ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().

  15. 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 .

  16. 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

  17. Ç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

Hata ayıklama ipuçları

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).

js konsolu

HTTP trafik izleyicisini görmek için sekmesine tıklayın . Formu gönderin ve istek üstbilgilerinin, form verilerinin ve yanıt organının beklentilere uygun olup olmadığını araştırın. Aşağıda ekran görüntüsü, basit bir formun tek <h:inputText>ve tek <h:commandButton>ile başarılı bir şekilde gönderilmesini gösteren Chrome'un bir örneğidir <f:ajax execute="@form" render="@form">.

ağ monitörü

(uyarı: bir üretim ortamından yukarıdaki gibi HTTP istek başlıklarından ekran görüntüleri yayınladığınızda, oturum ele geçirme saldırılarını önlemek için ekran görüntüsünde oturum çerezlerini karıştırdığınızdan / gizlediğinizden emin olun!)

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.

hata ayıklama sunucusu


1
2. noktan beni düşünmeye itti - uzun bir süre. Sorunlarımın çoğunun ana dosyamdaki bir f: view etiketinin olduğunu öğrendim. Muhtemelen bir form oluşturduğu için değil mi?
Paulo Guedes

2
@pauloguedes f: view'in bir form oluşturduğunu belirten hiçbir şey bulamıyorum. Anladığım kadarıyla bunun sadece bir konteyner olduğu. Deneyimlerime göre, f: view herhangi bir öğe oluşturmaz.
Lucas

@balusc 4. noktada küçük bir açıklama, commandLink dataTable'ın içinde değilse, yine de önemli mi?
Lucas

teşekkürler, mesele şu: Fasulyeyi görünüm kapsamına koymak ve / veya veri modelini fasulyenin (post) yapıcısına (ve böylece alıcı yönteminde değil!) yüklediğinizden emin olmak düzeltmelidir.
merveotesi

2
@Kukeltje: O bir EL istisna (zaten yanıtında 1 fıkra kapsamındaki) atılmış olacaktı
BalusC

54

Eğer sizin h:commandLinkiçinizde h:dataTableise, h:commandLinkçalışmamanızın başka bir nedeni olabilir:

Bağlanılan temel veri kaynağı h:dataTable, bağlantı tıklatıldığında tetiklenen ikinci JSF-Yaşam Döngüsü'nde de kullanılabilir olmalıdır.

Dolayısıyla, temeldeki veri kaynağı istek kapsamı dahilinde ise h:commandLink, çalışmaz!


2
Tamam, bu benim için tamamen açık değildi. Umarım cevabım yine de yararlıdır, çünkü benim durumumda en azından UICommand / UIData ile açıkça ilgilenmiyordum. "Çözüm" istek kapsamından oturum kapsamına bir destek fasulye teşvik edildi ...
jbandi

1
Ben ikinci Jens yorum ... SessionScoped benim RequestScoped fasulye olacak ayarlama verilerim üzerinde fark yarattıTablo - teşekkürler
Zack Macomber

28

Cevabım% 100 uygulanabilir olmasa da, çoğu arama motoru bunu ilk hit olarak buluyor, ancak yine de göndermeye karar verdim:

Eğer kullanıyorsanız PrimeFaces (ya da bazı benzer API) p:commandButtonya da p:commandLink, büyük ihtimalle açıkça eklemeyi unutmuş olduğunu vardır process="@this"komuta bileşenlerine.

PrimeFaces Kullanım Kılavuzu bölümünde 3.18 belirtildiği üzere, için varsayılan processve updateher ikisi de @formhemen hemen düz JSF beklenebilecek varsayılan karşı çıkmasına f:ajaxya olan richfaces, execute="@this"ve render="@none"sırasıyla.

Öğrenmem için bana çok zaman ayırdı. (... ve bence JSF'den farklı varsayılanları kullanmak oldukça amca!)


6
PrimeFaces için varsayılan değer processşudur @form. Dolayısıyla, eylem bu şekilde başlatılmazsa, ancak kullanılırsa @this, cevabımın büyük olasılıkla 3. noktası uygulanır.
BalusC

3
Bu olamaz. p:commandButtonEkleyene kadar actionListener yöntemini çağırmayan bir kodum vardı process="@this". Ayrıca, PrimeFaces Kullanıcı Kılavuzu bölüm 3.18 ve 3.19'da bahsettiğim varsayılanları açıkça listeler. Burada: primefaces.googlecode.com/files/primefaces_users_guide_3_4.pdf ... belki de varsayılanlar değiştirildi?
Kawu

8
Muhtemelen belgelerde bir hata var. Kaldırın process="@this"ve ekleyin <p:messages autoUpdate="true">(veya sıraya alınmış ancak görüntülenmeyen iletiler için sunucu günlüğünü okuyun) ve aslında bir dönüşüm / doğrulama hatasının oluştuğunu göreceksiniz.
BalusC

Bu soruyu neden kaldırdınız stackoverflow.com/questions/60673695/…
Kukeltje

Artık çok fazla değer sağlamayabileceğini düşündüm ... Silmeyi geri aldım.
Kawu

9

Primefaces ile ilgili bir şey daha söyleyeceğim p:commandButton!

p:commandButtonSunucuda yapılması gereken eylem için a kullandığınızda , sunucuya ajax / ajax olmayan bir istek oluşturmadan özel javascript yürütmek için kullanılan Push düğmeleritype="button" için kullanamazsınız .

Bu amaçla, typeözniteliği dağıtabilirsiniz (varsayılan değer "submit") veya açıkça kullanabilirsiniz type="submit".

Umarım bu birine yardımcı olur!


bu benim sayfalarımızdan birindeki temel sorunumdu, kabul edilen cevaptaki hiçbir nokta bizi daha da yakınlaştırmadı, bu bilgiyi nerede buldun?
Uriel Arvizu

Eh, bu sorunu birçok kez yaşadım ve araştırma yaptım ve bu özelliklerin p:commandButtonbirkaç değerine sahip olduğunu typeve buttonmüşteri tarafı ile ilgili her şeyi ilgilendiren bir şey buldum . Bunu Primefaces
doc'de

Gönderme ipucunuz günlerdir karşılaştığım sorunumu çözdü. Gönderiniz için çok teşekkürler!
gpuk360

Teşekkür ederim, bu benim için bir zevk. Bu cevabı kasten söyledim çünkü çoğumuzda böyle bir sorun vardı. Ne olduğunu anlayana kadar birkaç gününü de kaybetmiştim.
akelec

3

Bu sorunla başa çıktım ve bu sorunun bir nedenini daha buldum. Destek çekirdeğinizde * .xhtml dosyasında kullanılan özellikler için ayarlayıcı yöntemleriniz yoksa, işlem başlatılmaz.


5
Bunun oldukça açıklayıcı olması gerekirdi PropertyNotWritableException. Görmediyseniz, belki de uygun bir ajax istisna işleyicisi olmadan bir ajax isteği başlattınız, ancak sunucu günlüklerinde görmelisiniz.
BalusC

3
Ben p: commandButton ajax = "false" yapana kadar bu istisnayı göstermedi.
Dnavir

TEŞEKKÜR TANRI hayatımı kurtardın
exrezzo

3

Son zamanlarda IBM Genişletilmiş Yüzler Bileşenleri kullanarak bir JSF 1.2 uygulamasında çağırmıyor bir UICommand bir sorunla karşılaştı.

Bir datatable (genişletilmiş sürüm, yani <hx:datatable>) bir satırda bir komut düğmesi vardı ve UICommand tablodan belirli satırlardan (ateş olmaz satırlar varsayılan satır görüntüleme boyutundan daha büyük satırlar) ateş olmaz.

Görüntülenecek satır sayısını seçmek için bir açılır bileşenim vardı. Bu alanı destekleyen değer RequestScope. Tablonun kendisini destekleyen veriler bir çeşitti ViewScope(gerçekte geçici olarak SessionScope).

Satır görüntüsü, hangi değerin datatable'ın rowsözelliğine bağlı olduğu kontrolüyle artırıldıysa , bu değişiklik sonucunda görüntülenen satırların hiçbiri tıklandığında UICommand'ı tetikleyemez.

Bu özniteliğin tablo verileriyle aynı kapsamda yerleştirilmesi sorunu çözdü.

Bunun yukarıdaki BalusC # 4'te belirtildiğini düşünüyorum, ancak yalnızca tablo değerinin Görünüm veya Oturum kapsamına alınması değil, aynı zamanda bu tabloda görüntülenecek satır sayısını kontrol eden özellik olması da gerekiyordu.


2

Ben de bu sorunu vardı ve gerçekten sadece tarayıcının web konsolunu açtıktan sonra kök neden bilemek başladı. O zamana kadar, (hatta ile <p:messages>) herhangi bir hata mesajı alamadım . Web konsolu, gelen bir HTTP 405 durum kodu gösterdi <h:commandButton type="submit" action="#{myBean.submit}">.

Benim durumumda, Auth0 ve JSF yüzleri ve uygulama görünümlerimi ve iş mantığımı yürüten fasulye ile OAuth kimlik doğrulaması sağlayan vanilya HttpServlet'in bir karışımına sahibim.

Web.xml'imi yeniden düzenlediğimde ve bir orta adam-sunucu uygulamasını çıkardıktan sonra "sihirli bir şekilde" çalıştı.

Alt satırda sorun, orta-man-sunucu uygulamasının HttpServlet ortamından JSF ortamına yönlendirmek için RequestDispatcher.forward (...) kullanmasıydı, oysa daha önce çağrılan sunucu uygulaması HttpServletResponse.sendRedirect (... .).

Temel olarak, sendRedirect () kullanarak JSF "kapsayıcısı" kontrolü ele geçirirken, RequestDispatcher.forward () açık değildi.

Bilmediğim şey, neden faseletin fasulye özelliklerine erişebildiğini ancak onları ayarlayamadığını ve bu da sunucu uygulamaları ve JSF karışımını ortadan kaldırmak için açıkça çığlık attığını, ancak umarım bu, saatlerce kafa kafalarından kaçınmaya yardımcı olur. için masa-vurarak.


1

Bir <h:commandLink>eylemin richfaces datatableateş etmeyi reddettiği bir sorunu ayıklamakta çok eğlendim . Tablo bir noktada çalışıyordu ama belirgin bir nedenden ötürü durdu. Ben hiç taşsız bıraktım , sadece zengin satırları mutlu bir şekilde satır anahtarları olarak kullanılan null döndüren rich:datatableyanlış rowKeyConverterkullandığımı öğrenmek için. Bu, <h:commandLink>eylemimin çağrılmasını engelledi .



-1

Yerleştirmeyle ilgili sorunumu çözdüm:

<h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>

İçinde:

<h:form>
     <h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>
</h:form>

600'ün üzerinde oylanan cevapta 1 numara. Ayrı bir cevap olarak yazmaya gerek yok.
Kukeltje

-1

Benim için çalışılan çözüm bu.

<p:commandButton id="b1" value="Save" process="userGroupSetupForm"
                    actionListener="#{userGroupSetupController.saveData()}" 
                    update="growl userGroupList userGroupSetupForm" />

Burada Ajax çağrısı için process = "userGroupSetupForm" ifadesi zorunludur. actionListener @ViewScope Bean'den bir yöntem çağırıyor. Ayrıca growl mesajı, Datatable: userGroupList ve Form: userGroupSetupForm.


-2
<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" /> <!--Working-->
    </p:dialog>
  </h:form>

  <h:form id="form2">
    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" /> <!--Not Working-->
    </p:dialog>
  </h:form>
</ui:composition>

Çözmek için;

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" />   <!-- Working  -->
    </p:dialog>

    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" />   <!--Working  -->
    </p:dialog>
  </h:form>
  <h:form id="form2">
    <!-- ..........  -->
  </h:form>
</ui:composition>

Üzgünüm, ama bu benim düşünceme göre tamamen doğru değil. Etkili bir şekilde 2 iletişim kutusunun çalışması için kendi formlarında olması gerektiğini belirtirsiniz. % 99 kesinlik ile çözdüğünüz ve şimdi bunun çözüm olduğunu düşündüğünüz farklı bir probleminiz vardı ...
Kukeltje

Bu sayfaya dahil. Belki de bu soruna neden olabilir. Oylamadan önce test etmelisiniz.
Kenan Gökbak

Hayır, göndermeden önce minimal tekrarlanabilir bir örnek oluşturmuş olmalısınız (ve ancak o zaman test edebilirim) ... Ve evet, iletişim kutuları ve formlarla ilgili sorunlara neden olabilir, ancak sorun hala çözmek istediğiniz şey değil . İlk örneğiniz gayet iyi ve ikincisi var olmayan bir sorunun çözümü değil% 100 kesinlik ile
Kukeltje

Neyse. Uygulamam iyi çalışıyor. Formda iletişim kutularının nerede olduğu önemli değil. Başka bir sorunu çözmek için ikinci bir form oluşturmak zorundayım.
Kenan Gökbak

Uygulamanız çalışıyor olabilir, ancak bu orijinal bir sorundan ve çözümünüzden net / görünür değil. Ayrıca, _ "Diyorum ki formdaki iletişim kutularının nerede önemli olmadığını düşünüyorum." _Ama cevabınızda nerede oldukları önemli gibi görünüyor. İfademi destekleyen bir çelişki. Üzgünüz, ama cevabınız basit yanlış ... (üzerinde zaten başka bir düşüş var)
Kukeltje
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.