DnwAlgorithma
DnwAlgorithma

Reputation: 119

Use two validation messages in different places for JSF SelectOneMenu

I am using JSF dropdown list.Here is my code

<h:selectOneMenu id="selectedMenu" value="#{bean.selectedVal}" validator="#{bean.validate}" validatorMessage="#{bean.message}">
    <f:selectItems value="#{bean.list}" .../>
    <f:ajax event="change" render="frm:msgSelectedMenu1" />
</h:selectOneMenu>
<h:message for="selectedMenu" style="color:red" id="msgSelectedMenu1" />
<h:message for="selectedMenu" style="color:green" id="msgSelectedMenu2" />

I am parsing validation error message throwing java exception.

public void validate(FacesContext context, UIComponent component, Object value)
        throws ValidatorException {
 ...
 if (condition 1) {
    FacesMessage msg = new FacesMessage();
    setMessage("Error_Message_1");
    throw new ValidatorException(msg);
 }}

In this cause error message successfully bind with 'msgSelectedMenu1'.But in some causes I want to set another error messages ("Error_Message_2") for some selected items with 'msgSelectedMenu2'.

Upvotes: 1

Views: 170

Answers (1)

Michel Foucault
Michel Foucault

Reputation: 1732

You can try to use the actionListener of f:ajax, you check the value in actionListener and then throw the ValidatorException using rendered on h:message, deleting the validator attribute

<h:message for="selectedMenu" style="color:red" id="msgSelectedMenu1" rendered="${foo.message1}" />
<h:message for="selectedMenu" style="color:green" id="msgSelectedMenu2" 
rendered="${foo.message2}" />


public void foo(){
         if (condition 1) {
            FacesMessage msg = new FacesMessage();
            setMessage("Error_Message_1");
            message1 = true; 
            message2 = false;
            throw new ValidatorException(msg);

         }
        }

Upvotes: 1

Related Questions