web-dev-qa-db-fra.com

Comment ajouter un message à un composant spécifique à partir du bean de sauvegarde JSF

J'ai un h: inputText et un h: message qui y sont connectés:

<h:inputText id="myText" value="#{myController.myText}" />
<a4j:outputPanel>
    <h:message for="myText" .../>
</a4j:outputPanel>

Je veux lui envoyer un message depuis Java, de la manière suivante:

FacesContext.getCurrentInstance().addMessage(arg0, arg1);

qui est envoyé à h: messages, mais à un identifiant spécifique sous une forme spécifique. Comment puis-je faire ceci? (Sans implémenter le bean de validation ou la méthode de validation - c'est-à-dire sans lever l'exception de validation).

19
Benchik

Vous devez fournir ce que l'on appelle client id, que vous trouverez sur UIComponent.

Ce qui suit est un exemple rapide de comment l'utiliser.

Considérez le bean suivant:

@ManagedBean
@RequestScoped
public class ComponentMsgBean {

    private UIComponent component;

    public UIComponent getComponent() {
        return component;
    }

    public void setComponent(UIComponent component) {
        this.component = component;
    }

    public String doAction() {

        FacesContext context = FacesContext.getCurrentInstance();

        context.addMessage(component.getClientId(), new FacesMessage("Test msg"));

        return "";
    }

}

utilisé sur le Facelet suivant:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://Java.Sun.com/jsf/html"
    xmlns:f="http://Java.Sun.com/jsf/core"
    xmlns:ui="http://Java.Sun.com/jsf/facelets" 
    >

    <h:body>

        <h:form>
            <h:outputText id="test" value="test component" binding="#{componentMsgBean.component}"/>
            <h:message for="test"/>

            <h:commandButton value="click me" action="#{componentMsgBean.doAction}" />
        </h:form>

    </h:body>
</html>

Cela ajoutera un message Faces avec le contenu "Test msg" pour le composant outputText utilisé dans l'exemple.

32
Arjan Tijms

Une autre façon de le faire est de donner un ID au formulaire, comme "form1", puis, lors de l'ajout du message, le clientId est "form1: test".

7
user2166787