I tried to validate two fields with a listener. It's working well after submit of the form : the faces error message is rendered.
But, it's not working after the blur event, like for any standard validation.
This is the part of the view :
Code: Select all
<p:fieldset style="margin-top:15px;">
<h:panelGrid columns="3" cellpadding="4"
columnClasses="form_col1,form_col2,form_col3" id="email_group">
<f:event listener="#{inscription.validateEmail}" type="postValidate" />
<h:outputLabel value="#{msgs.email}" />
<p:inputText id="email" value="#{inscription.email1}" label="#{msgs.email}">
<p:ajax event="blur" update="msg_email" />
</p:inputText>
<p:message for="email" id="msg_email" />
<h:outputLabel value="#{msgs.confirmMail}" />
<p:inputText id="email2" value="#{inscription.email2}" label="#{msgs.confirmMail}">
<p:ajax event="blur" update="msg_email2,msg_email_group" />
</p:inputText>
<h:panelGroup>
<p:message for="email2" id="msg_email2" />
<p:message for="email_group" id="msg_email_group" />
</h:panelGroup>
</h:panelGrid>
</p:fieldset>
Code: Select all
public void validateEmail(ComponentSystemEvent event){
FacesContext context = FacesContext.getCurrentInstance();
String error_txt = LocaleHelper.getLocaleString(context.getApplication().getMessageBundle(), "error_emailCompare", null, context.getViewRoot().getLocale());
UIComponent components = event.getComponent();
UIInput uiText1 = (UIInput)components.findComponent("email");
String text1 = ""+(String)uiText1.getLocalValue();
//get textbox2 value
UIInput uiText2 = (UIInput)components.findComponent("email2");
String text2 = ""+(String)uiText2.getLocalValue();
if (!text1.equals(text2)) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary(error_txt);
context.addMessage(components.getClientId(), message);
}
}