commandButton / commandLink / ajax action / metode listener tidak dipanggil atau nilai input tidak disetel / diperbarui

345

Terkadang, saat menggunakan <h:commandLink>, <h:commandButton>atau <f:ajax>, metode action, actionListeneratau listeneryang terkait dengan tag sama sekali tidak dipanggil. Atau, properti kacang tidak diperbarui dengan UIInputnilai yang dikirimkan .

Apa penyebab dan solusi yang memungkinkan untuk ini?

Muhammad Hewedy
sumber

Jawaban:

687

pengantar

Setiap kali UICommandkomponen ( <h:commandXxx>,, <p:commandXxx>dll) gagal memanggil metode tindakan yang terkait, atau UIInputkomponen ( <h:inputXxx>,, <p:inputXxxx>dll) gagal memproses nilai-nilai yang dikirimkan dan / atau memperbarui nilai-nilai model, dan Anda tidak melihat adanya pengecualian yang dapat googlable dan / atau peringatan di log server, juga tidak ketika Anda mengkonfigurasi penangan pengecualian ajax sesuai penanganan Exception dalam permintaan ajax JSF , atau ketika Anda mengatur parameter konteks di bawah ini dalam web.xml,

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

dan Anda juga tidak melihat kesalahan googlable dan / atau peringatan di konsol JavaScript peramban (tekan F12 di Chrome / Firefox23 + / IE9 + untuk membuka toolset pengembang web dan kemudian membuka tab Konsol ), kemudian bekerja di bawah daftar kemungkinan penyebabnya.

Kemungkinan penyebab

  1. UICommanddan UIInputkomponen harus ditempatkan di dalam UIFormkomponen, misalnya <h:form>(dan dengan demikian bukan HTML biasa <form>), jika tidak, tidak ada yang dapat dikirim ke server. UICommandkomponen juga tidak boleh memiliki type="button"atribut, jika tidak maka akan menjadi tombol mati yang hanya berguna untuk JavaScript onclick. Lihat juga Cara mengirim nilai input formulir dan memanggil metode dalam JSF bean dan <h: commandButton> tidak memulai postback .

  2. Anda tidak dapat menyarang banyak UIFormkomponen satu sama lain. Ini ilegal dalam HTML. Perilaku browser tidak ditentukan. Awas dengan menyertakan file! Anda dapat menggunakan UIFormkomponen secara paralel, tetapi mereka tidak akan saling memproses selama pengiriman. Anda juga harus berhati-hati dengan antipattern "God Form"; pastikan bahwa Anda tidak secara tidak sengaja memproses / memvalidasi semua input (tidak terlihat) lainnya dalam bentuk yang sama (misalnya memiliki dialog tersembunyi dengan input yang diperlukan dalam bentuk yang sama). Lihat juga Cara menggunakan <h: form> di halaman JSF? Bentuk tunggal? Berbagai bentuk? Formulir bersarang? .

  3. Tidak ada UIInputnilai error validasi / konversi seharusnya terjadi. Anda dapat menggunakan <h:messages>untuk menampilkan pesan apa pun yang tidak ditampilkan oleh <h:message>komponen spesifik input apa pun . Jangan lupa untuk menyertakan iddari <h:messages>dalam <f:ajax render>, jika ada, sehingga akan diperbarui juga pada permintaan ajax. Lihat juga h: pesan tidak menampilkan pesan saat p: commandButton ditekan .

  4. Jika UICommandatau UIInputkomponen ditempatkan di dalam komponen iterasi seperti <h:dataTable>,, <ui:repeat>dll, maka Anda perlu memastikan bahwa valuekomponen iterating yang sama persis dipertahankan selama fase nilai permintaan yang berlaku pada formulir kirim permintaan. JSF akan mengulanginya untuk menemukan tautan / tombol yang diklik dan memasukkan nilai input. Menempatkan kacang di ruang lingkup tampilan dan / atau memastikan bahwa Anda memuat model data di @PostConstructkacang (dan dengan demikian tidak dalam metode pengambil!) Harus memperbaikinya. Lihat juga Bagaimana dan kapan saya harus memuat model dari basis data untuk h: dataTable .

  5. Jika UICommandatau UIInputkomponen disertakan oleh sumber dinamis seperti <ui:include src="#{bean.include}">, maka Anda perlu memastikan bahwa nilai yang sama persis #{bean.include}dipertahankan selama tampilan waktu pembuatan formulir mengirimkan permintaan. JSF akan menjalankannya kembali saat membangun pohon komponen. Menempatkan kacang di ruang lingkup tampilan dan / atau memastikan bahwa Anda memuat model data di @PostConstructkacang (dan dengan demikian tidak dalam metode pengambil!) Harus memperbaikinya. Lihat juga Bagaimana ajax-refresh dinamis termasuk konten dengan menu navigasi? (JSF SPA) .

  6. The renderedatribut dari komponen dan semua orang tua nya dan testatribut dari setiap orangtua <c:if>/ <c:when>tidak harus mengevaluasi untuk falseselama menerapkan fase nilai permintaan formulir mengirimkan permintaan. JSF akan memeriksanya kembali sebagai bagian dari perlindungan terhadap permintaan yang dirusak / diretas. Menyimpan variabel yang bertanggung jawab untuk kondisi tersebut dalam @ViewScopedkacang atau memastikan bahwa Anda benar preinitializing kondisi di @PostConstructdari @RequestScopedkacang harus memperbaikinya. Hal yang sama berlaku untuk disabledatribut komponen, yang seharusnya tidak dievaluasi trueselama fase nilai permintaan berlaku. Lihat juga tindakan JSF CommandButton tidak dipanggil , Formulir kirim dalam komponen yang diberikan secara kondisional tidak diproses danh: commandButton tidak berfungsi setelah saya membungkusnya dalam <h: panelGroup rendered> .

  7. The onclickatribut dari UICommandkomponen dan onsubmitatribut dari UIFormkomponen tidak harus kembali falseatau menyebabkan kesalahan JavaScript. Seharusnya dalam kasus <h:commandLink>atau <f:ajax>juga tidak ada kesalahan JS terlihat di konsol JS browser. Biasanya googling pesan kesalahan yang tepat sudah akan memberi Anda jawabannya. Lihat juga menambahkan / memuat jQuery secara manual dengan hasil PrimeFaces di Uncaught TypeErrors .

  8. Jika Anda menggunakan Ajax melalui JSF 2.x <f:ajax>atau mis. PrimeFaces <p:commandXxx>, pastikan Anda memiliki <h:head>di dalam master template alih-alih <head>. Jika tidak, JSF tidak akan dapat secara otomatis menyertakan file JavaScript yang diperlukan yang berisi fungsi Ajax. Ini akan menghasilkan kesalahan JavaScript seperti "mojarra tidak didefinisikan" atau "PrimeFaces tidak didefinisikan" di konsol JS browser. Lihat juga h: commandLink actionlistener tidak dipanggil ketika digunakan dengan f: ajax dan ui: repeat .

  9. Jika Anda menggunakan Ajax, dan nilai yang dikirimkan berakhir null, maka pastikan bahwa UIInputdan UICommandkomponen yang diminati dicakup oleh <f:ajax execute>atau mis. <p:commandXxx process>, Jika tidak, mereka tidak akan dieksekusi / diproses. Lihat juga Nilai formulir yang dikirimkan tidak diperbarui dalam model saat menambahkan <f: ajax> ke <h: commandButton> dan Memahami proses / pembaruan PrimeFaces dan JSF f: ajax execut / render atribut .

  10. Jika nilai yang dikirimkan masih berakhir null, dan Anda menggunakan CDI untuk mengelola kacang, maka pastikan Anda mengimpor anotasi cakupan dari paket yang benar, jika tidak, CDI akan default @Dependentyang secara efektif membuat kembali kacang pada setiap evaluasi EL. ekspresi. Lihat juga @SessionScoped bean kehilangan lingkup dan dibuat ulang setiap saat, bidang menjadi nol dan Apa Lingkup Managed Bean standar dalam aplikasi JSF 2?

  11. Jika orangtua <h:form>dengan UICommandtombol sebelumnya telah diberikan / diperbarui oleh permintaan ajax yang berasal dari formulir lain di halaman yang sama, maka tindakan pertama akan selalu gagal di JSF 2.2 atau lebih lama. Tindakan kedua dan selanjutnya akan berhasil. Ini disebabkan oleh bug dalam penanganan kondisi tampilan yang dilaporkan sebagai masalah spesifikasi JSF 790 dan saat ini diperbaiki di JSF 2.3. Untuk versi JSF yang lebih lama, Anda harus secara eksplisit menentukan ID <h:form>di renderdalam <f:ajax>. Lihat juga h: commandButton / h: commandLink tidak berfungsi pada klik pertama, hanya berfungsi pada klik kedua .

  12. Jika <h:form>telah enctype="multipart/form-data"ditetapkan untuk mendukung pengunggahan file, maka Anda perlu memastikan bahwa Anda menggunakan setidaknya JSF 2.2, atau bahwa filter servlet yang bertanggung jawab untuk mem-parsing permintaan data formulir / data multi-bagian telah dikonfigurasikan dengan benar, jika tidak maka FacesServletkehendak akhirnya tidak mendapatkan parameter permintaan sama sekali dan dengan demikian tidak dapat menerapkan nilai-nilai permintaan. Cara mengonfigurasi filter seperti itu tergantung pada komponen unggahan file yang digunakan. Untuk Tomahawk <t:inputFileUpload>, periksa jawaban ini dan untuk PrimeFaces <p:fileUpload>, periksa jawaban ini . Atau, jika Anda sebenarnya tidak mengunggah file sama sekali, maka hapus atributnya sama sekali.

  13. Pastikan bahwa ActionEventargumen actionListeneradalah javax.faces.event.ActionEventdan karenanya bukan java.awt.event.ActionEvent, yang disarankan sebagian besar IDE sebagai opsi pelengkapan otomatis pertama. Tidak memiliki argumen juga salah jika Anda menggunakan actionListener="#{bean.method}". Jika Anda tidak ingin argumen dalam metode Anda, gunakan actionListener="#{bean.method()}". Atau mungkin Anda benar-benar ingin menggunakan actionbukan actionListener. Lihat juga Perbedaan antara tindakan dan daftar tindakan .

  14. Pastikan bahwa tidak ada PhaseListeneratau apa pun EventListenerdalam rantai respons-permintaan telah mengubah siklus hidup JSF untuk melewati fase tindakan pemanggilan dengan misalnya menelepon FacesContext#renderResponse()atau FacesContext#responseComplete().

  15. Pastikan bahwa tidak ada Filteratau Servletdalam rantai permintaan-respons yang sama telah memblokir permintaan untuk FacesServletentah bagaimana. Misalnya, filter masuk / keamanan seperti Spring Security. Khususnya dalam permintaan ajax yang secara default akan berakhir tanpa umpan balik UI sama sekali. Lihat juga Spring Security 4 dan PrimeFaces 5 AJAX penanganan permintaan .

  16. Jika Anda menggunakan PrimeFaces <p:dialog>atau a <p:overlayPanel>, maka pastikan bahwa mereka memiliki milik mereka sendiri <h:form>. Karena, komponen-komponen ini secara default oleh JavaScript dipindahkan ke akhir HTML <body>. Jadi, jika mereka awalnya duduk di dalam <form>, maka mereka sekarang tidak lagi duduk di <form>. Lihat juga p: commandbutton action tidak berfungsi di dalam dialog p:

  17. Bug dalam framework. Misalnya, RichFaces memiliki " kesalahan konversi " saat menggunakan rich:calendarelemen UI dengan defaultLabelatribut (atau, dalam beberapa kasus, rich:placeholdersub-elemen). Bug ini mencegah metode kacang dari dipanggil ketika tidak ada nilai yang ditetapkan untuk tanggal kalender. Menelusuri bug kerangka kerja dapat diselesaikan dengan mulai dengan contoh kerja sederhana dan membangun kembali halaman cadangan hingga bug ditemukan.

Petunjuk debug

Jika Anda masih macet, saatnya untuk debug. Di sisi klien, tekan F12 di browser web untuk membuka perangkat pengembang web. Klik tab Konsol jadi lihat conosle JavaScript. Seharusnya bebas dari kesalahan JavaScript. Tangkapan layar di bawah adalah contoh dari Chrome yang menunjukkan kasus pengiriman <f:ajax>tombol yang diaktifkan tanpa <h:head>dinyatakan (seperti dijelaskan dalam poin 7 di atas).

konsol js

Klik tab Jaringan untuk melihat monitor lalu lintas HTTP. Kirim formulir dan selidiki apakah header permintaan dan formulir data serta badan respons sesuai harapan. Tangkapan layar di bawah adalah contoh dari Chrome yang menunjukkan pengiriman ajax yang berhasil dari formulir sederhana dengan satu <h:inputText>dan satu <h:commandButton>dengan <f:ajax execute="@form" render="@form">.

monitor jaringan

(peringatan: ketika Anda memposting tangkapan layar dari tajuk permintaan HTTP seperti di atas dari lingkungan produksi, maka pastikan Anda mengacak / mengaburkan cookie sesi apa pun di tangkapan layar untuk menghindari serangan pembajakan sesi!)

Di sisi server, pastikan server dijalankan dalam mode debug. Masukkan debug breakpoint dalam metode komponen JSF yang Anda inginkan untuk dipanggil selama memproses pengiriman formulir. Misalnya dalam hal UICommandkomponen, itu akan terjadi UICommand#queueEvent()dan dalam kasus UIInputkomponen, itu akan menjadi UIInput#validate(). Cukup langkah melalui eksekusi kode dan periksa apakah aliran dan variabel sesuai harapan. Screenshot di bawah ini adalah contoh dari debugger Eclipse.

server debug

BalusC
sumber
1
Poin kedua Anda membuat saya berpikir - untuk waktu yang lama. Saya baru tahu bahwa tag f: view di file utama saya adalah penyebab sebagian besar masalah saya. Dan mungkin karena itu membuat formulir, kan?
Paulo Guedes
2
@pauloguedes Saya tidak bisa menemukan apa pun yang menyatakan bahwa tampilan f: membuat formulir. Pemahaman saya adalah itu hanya sebuah wadah. Dalam pengalaman saya, tampilan f: tidak membuat elemen apa pun.
Lucas
@balusc Sedikit klarifikasi pada poin 4, jika commandLink tidak ada dalam dataTable itu sendiri, apakah masih penting?
Lucas
terima kasih, intinya adalah intinya: Menempatkan kacang di lingkup tampilan dan / atau memastikan bahwa Anda memuat model data di (posting) konstruktor kacang (dan dengan demikian tidak dalam metode pengambil!) harus memperbaikinya.
merveotesi
2
@Kelteltje: itu akan melemparkan pengecualian EL (sudah tercakup oleh paragraf 1 dalam jawaban)
BalusC
54

Jika Anda h:commandLinkberada di dalam, h:dataTableada alasan lain mengapa hal h:commandLinkitu tidak berfungsi:

Sumber data dasar yang terikat pada h:dataTablejuga harus tersedia di siklus hidup JSF kedua yang dipicu ketika tautan diklik.

Jadi, jika sumber data yang mendasarinya adalah permintaan yang dicakup, maka h:commandLinktidak akan berfungsi!

jbandi
sumber
2
Ok, itu tidak sepenuhnya jelas bagi saya. Saya berharap jawaban saya sangat membantu, karena dalam kasus saya setidaknya saya tidak berurusan dengan UICommand / UIData secara eksplisit. "Solusi" mempromosikan kacang dukungan dari lingkup permintaan ke ruang lingkup sesi ...
jbandi
1
Saya kedua komentar Jens ... mengatur kacang RequestScoped saya menjadi SessionScoped membuat perbedaan pada dataTable saya - terima kasih
Zack Macomber
28

Meskipun jawaban saya tidak 100% berlaku, tetapi kebanyakan mesin pencari menemukan ini sebagai hit pertama, saya memutuskan untuk mempostingnya nontheless:

Jika Anda menggunakan PrimeFaces (atau API serupa) p:commandButtonatau p:commandLink, kemungkinan Anda lupa menambahkan secara eksplisit process="@this"ke komponen perintah Anda.

Seperti yang dinyatakan oleh Panduan Pengguna PrimeFaces di bagian 3.18, default untuk processdan updatekeduanya @form, yang cukup banyak menentang default yang mungkin Anda harapkan dari JSF f:ajaxatau RichFaces, yang masing execute="@this"- render="@none"masing.

Hanya butuh saya waktu looong untuk mencari tahu. (... dan saya pikir agak tidak sopan untuk menggunakan default yang berbeda dari JSF!)

Kawu
sumber
6
Default untuk PrimeFaces processadalah @form. Jadi jika tindakan tidak dipanggil dengan cara ini, tetapi dilakukan saat menggunakan @this, maka kemungkinan besar poin 3 dari jawaban saya berlaku.
BalusC
3
Ini tidak mungkin. Saya punya p:commandButtonyang tidak meminta metode actionListener sampai saya menambahkan process="@this". Lebih lanjut, Panduan Pengguna PrimeFaces secara eksplisit mencantumkan default yang saya sebutkan di bagian 3.18 dan 3.19. Itu ada di sini: primefaces.googlecode.com/files/primefaces_users_guide_3_4.pdf ... mungkin defaultnya diubah?
Kawu
8
Kemungkinan kesalahan dalam dokumentasi. Hapus process="@this"dan tambahkan <p:messages autoUpdate="true">(atau baca saja log server untuk pesan yang antri tetapi tidak ditampilkan) dan Anda akan melihat bahwa sebenarnya terjadi kesalahan konversi / validasi.
BalusC
Mengapa Anda menghapus pertanyaan ini stackoverflow.com/questions/60673695/…
Kukeltje
Saya pikir itu mungkin tidak memberikan banyak nilai sekarang ... Saya membatalkan penghapusan.
Kawu
9

Saya akan menyebutkan satu hal lagi yang menyangkut Primefaces p:commandButton!

Ketika Anda menggunakan p:commandButtonuntuk tindakan yang perlu dilakukan di server, Anda tidak dapat menggunakan type="button"karena itu untuk tombol Push yang digunakan untuk mengeksekusi javascript kustom tanpa menyebabkan permintaan ajax / non-ajax ke server.

Untuk tujuan ini, Anda dapat mengeluarkan typeatribut (nilai defaultnya adalah "submit") atau Anda dapat menggunakan secara eksplisit type="submit".

Semoga ini bisa membantu seseorang!

akelec
sumber
ini adalah masalah utama saya di salah satu halaman kami, tidak ada poin dalam jawaban yang diterima membawa kami lebih dekat, di mana Anda menemukan informasi ini?
Uriel Arvizu
Yah, saya telah mengalami masalah itu berkali-kali, dan saya melakukan penelitian dan menemukan bahwa p:commandButtonmemiliki beberapa nilai typeatribut, dan buttonmerupakan salah satu yang menyangkut segalanya tentang sisi klien. Agak sulit untuk menemukan ini di Primefacesdoc, tapi di sini ada satu tautan: developer.am/primefaces/…
akelec
Petunjuk kirim Anda menyelesaikan masalah yang saya hadapi selama berhari-hari. Terima kasih banyak kiriman Anda!
gpuk360
Terima kasih, ini kesenangan saya. Saya sengaja memberikan jawaban ini karena banyak dari kita memiliki masalah seperti itu. Saya telah kehilangan beberapa hari juga sampai menyadari tentang apa.
akelec
3

Terjebak dengan masalah ini sendiri dan menemukan satu lagi penyebab masalah ini. Jika Anda tidak memiliki metode penyetel dalam kacang latar untuk properti yang digunakan di * .xhtml Anda, maka tindakan itu sama sekali tidak diminta.

Dnavir
sumber
5
Seharusnya menghasilkan penjelasan sendiri PropertyNotWritableException. Jika Anda tidak melihatnya, mungkin Anda memecat permintaan ajax tanpa penangan pengecualian ajax yang tepat, tetapi Anda harus melihatnya di log server.
BalusC
3
Itu tidak menunjukkan pengecualian itu sampai saya membuat p: commandButton's ajax = "false".
Dnavir
TERIMA KASIH kau menyelamatkan hidupku
exrezzo
3

Saya baru-baru ini mengalami masalah dengan perintah UIC yang tidak meminta dalam aplikasi JSF 1.2 menggunakan Komponen IBM Extended Faces.

Saya memiliki tombol perintah pada deretan dataat (versi yang diperluas, jadi <hx:datatable>) dan perintah UIC tidak akan diaktifkan dari baris tertentu dari tabel (baris yang tidak akan diaktifkan adalah baris yang lebih besar daripada ukuran tampilan baris standar).

Saya memiliki komponen tarik-turun untuk memilih jumlah baris yang akan ditampilkan. Nilai yang mendukung bidang ini ada di RequestScope. Data yang mendukung tabel itu sendiri adalah semacam ViewScope(dalam kenyataannya, sementara SessionScope).

Jika tampilan baris ditingkatkan melalui kontrol yang nilainya juga terikat pada rowsatribut datatable , tidak ada baris yang ditampilkan sebagai hasil dari perubahan ini yang dapat memunculkan perintah UIC saat diklik.

Menempatkan atribut ini dalam cakupan yang sama dengan data tabel itu sendiri memperbaiki masalah.

Saya pikir ini disinggung dalam BalusC # 4 di atas, tetapi tidak hanya nilai tabel perlu View atau Sesi scoped tetapi juga atribut yang mengontrol jumlah baris untuk ditampilkan pada tabel itu.

Brent C
sumber
2

Saya punya masalah ini juga dan baru benar-benar mulai mengasah pada penyebab utama setelah membuka konsol web browser. Sampai saat itu, saya tidak dapat menerima pesan kesalahan (bahkan dengan <p:messages>). Konsol web menunjukkan kode status HTTP 405 yang kembali dari Internet <h:commandButton type="submit" action="#{myBean.submit}">.

Dalam kasus saya, saya memiliki campuran vanilla HttpServlet yang menyediakan autentikasi OAuth melalui Auth0 dan JSF facelet dan bean yang menjalankan tampilan aplikasi dan logika bisnis saya.

Setelah saya refactored web.xml saya, dan menghapus mid-man-servlet, itu kemudian "ajaib" bekerja.

Intinya, masalahnya adalah bahwa orang tengah-servlet menggunakan RequestDispatcher.forward (...) untuk mengalihkan dari lingkungan HttpServlet ke lingkungan JSF sedangkan servlet dipanggil sebelum diarahkan dengan HttpServletResponse.sendRedirect (.. .).

Pada dasarnya, menggunakan sendRedirect () memungkinkan "wadah" JSF untuk mengambil kendali sedangkan RequestDispatcher.forward () jelas tidak.

Apa yang saya tidak tahu adalah mengapa facelet dapat mengakses properti kacang tetapi tidak dapat mengaturnya, dan ini jelas berteriak untuk menghilangkan campuran servlets dan JSF, tapi saya harap ini membantu seseorang menghindari berjam-jam head- ke-meja-membenturkan.

Anak sungai
sumber
1

Saya memiliki banyak kesenangan men-debug masalah di mana <h:commandLink>tindakan di richfaces datatablemenolak memecat. Meja yang digunakan untuk bekerja di beberapa titik tetapi berhenti tanpa alasan yang jelas. Saya tidak meninggalkan kebutuhan bisnis yang terlewat, hanya untuk mengetahui bahwa saya rich:datatablemenggunakan yang salah rowKeyConverteryang menghasilkan nol yang dengan senang hati digunakan sebagai kunci baris. Ini mencegah <h:commandLink>tindakan saya dipanggil.

Mustafa
sumber
0

Satu lagi kemungkinan: jika gejalanya adalah doa pertama berfungsi, tetapi yang berikutnya tidak, Anda mungkin menggunakan PrimeFaces 3.x dengan JSF 2.2, seperti yang dijelaskan di sini: Tidak ada kondisi tampilan yang dikirim .

Dave Mulligan
sumber
-1

Saya memperbaiki masalah saya dengan menempatkan:

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

Di:

<h:form>
     <h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>
</h:form>
Georgi Peev
sumber
Itu adalah # 1 di> 600 jawaban yang dipilih. Tidak perlu menuliskannya sebagai jawaban terpisah.
Kukeltje
-1

Ini solusinya, yang berhasil untuk saya.

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

Di sini, proses = "userGroupSetupForm" atrribute wajib untuk panggilan Ajax. actionListener memanggil metode dari @ViewScope Bean. Juga memperbarui pesan growl, Datatable: userGroupList dan Form: userGroupSetupForm.

Rajib Kumer Ghosh
sumber
-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>

Menyelesaikan;

<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>
Kenan Gökbak
sumber
Maaf, tapi ini menurut pendapat saya yang rendah hati sama sekali tidak benar. Anda secara efektif menyatakan bahwa 2 dialog harus dalam bentuknya sendiri agar berfungsi. Anda dengan kepastian 99% memiliki masalah berbeda yang Anda selesaikan dan yang kini Anda pikir ini solusinya ...
Kukeltje
Ini termasuk halaman. Mungkin ini dapat menyebabkan masalah. Anda harus mengujinya sebelum memilih.
Kenan Gökbak
Tidak, Anda seharusnya telah membuat contoh minimal yang dapat direproduksi sebelum memposting (dan hanya setelah itu saya dapat menguji) ... Dan ya termasuk dapat mengakibatkan masalah dengan dialog dan formulir, tapi kemudian masalahnya masih bukan apa yang Anda ingin selesaikan di sini . Contoh pertama Anda baik-baik saja dan yang kedua adalah dengan kepastian 100% bukan solusi dari masalah yang tidak ada
Kukeltje
Bagaimanapun. Aplikasi saya berfungsi dengan baik. Saya pikir itu tidak penting di mana kotak dialog dalam formulir. Saya harus membuat formulir kedua untuk menyelesaikan masalah lain.
Kenan Gökbak
Aplikasi Anda mungkin berfungsi, tetapi itu tidak jelas / terlihat dari masalah asli dan solusi Anda. Selain itu, Anda mengatakan _ "Saya pikir itu tidak penting di mana kotak dialog dalam formulir." _Tapi dalam jawaban Anda tampaknya penting di mana mereka berada. Kontradiksi yang mendukung pernyataan saya. Maaf, tapi jawaban Anda jelas salah ... (ada downvote lain sudah ada di sana)
Kukeltje