Di aplikasi JSF/Facelets saya, berikut ini adalah versi sederhana dari bagian formulir saya:
<h:form id="myform">
<h:inputSecret value="#{createNewPassword.newPassword1}" id="newPassword1" />
<h:message class="error" for="newPassword1" />
<h:inputSecret value="#{createNewPassword.newPassword2}" id="newPassword2" />
<h:message class="error" for="newPassword2" />
<h:commandButton value="Continue" action="#{createNewPassword.continueButton}" />
</h:form>
Saya ingin dapat menetapkan kesalahan ke tag h:message tertentu berdasarkan sesuatu yang terjadi dalam metode continueButton(). Kesalahan yang berbeda perlu ditampilkan untuk newPassword dan newPassword2. Validator tidak akan benar-benar berfungsi, karena metode yang akan memberikan hasil (dari DB) dijalankan dalam metode continueButton(), dan terlalu mahal untuk dijalankan dua kali.
Saya tidak dapat'tidak dapat menggunakan tag h:messages karena halaman memiliki beberapa tempat yang saya perlukan untuk menampilkan pesan kesalahan yang berbeda. Ketika saya mencoba ini, halaman menampilkan duplikat dari setiap pesan.
Saya mencoba ini sebagai tebakan terbaik, tetapi tidak berhasil:
public Navigation continueButton() {
...
expensiveMethod();
if(...) {
FacesContext.getCurrentInstance().addMessage("newPassword", new FacesMessage("Error: Your password is NOT strong enough."));
}
}
Apa yang saya lewatkan? Bantuan apa pun akan sangat dihargai!
JSF adalah binatang buas. Saya mungkin melewatkan sesuatu, tetapi saya biasa memecahkan masalah serupa dengan menyimpan pesan yang diinginkan ke properti bean, dan kemudian menampilkan properti melalui outputText:
<h:outputText
value="#{CreateNewPasswordBean.errorMessage}"
render="#{CreateNewPasswordBean.errorMessage != null}" />
Menemukan ini saat Googling. Postingan kedua membuat poin tentang fase JSF yang berbeda, yang mungkin menyebabkan pesan kesalahan Anda menjadi hilang. Juga, cobalah null sebagai pengganti "newPassword" karena Anda tidak memiliki objek apapun dengan id newPassword.
Saya mencoba ini sebagai tebakan terbaik, tetapi tidak berhasil:
Kelihatannya benar bagi saya. Sudahkah Anda mencoba mengatur tingkat keparahan pesan secara eksplisit? Juga saya yakin ID harus sama dengan komponen (yaitu, Anda harus menggunakan newPassword1 atau newPassword2, jika itu adalah ID Anda, dan bukan newPassword seperti yang Anda miliki dalam contoh).
FacesContext.getCurrentInstance().addMessage("newPassword1",
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error Message"));
Kemudian gunakan <h:message for="newPassword1" />
untuk menampilkan pesan kesalahan pada halaman JSF.