Как добавить сообщение к определенному компоненту из компонента EJB - PullRequest
17 голосов
/ 13 марта 2011

У меня есть h: inputText и h: message, подключенное к нему:

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

Я хочу отправить ему сообщение из Java, например:

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

, который отправляется в h: messages, но с определенным идентификатором в определенной форме. Как я могу это сделать? (Без реализации bean-компонента проверки или метода проверки - то есть без исключения проверки).

Ответы [ 2 ]

32 голосов
/ 13 марта 2011

Вам необходимо предоставить так называемый client id, который вы найдете на UIComponent.

Ниже приведен краткий пример того, как его использовать.

Рассмотрим следующий компонент:

@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 "";
    }

}

используется на следующем Facelet:

<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>

Это добавит сообщение Faces с содержимым «Test msg» для компонента outputText, используемого в примере.

7 голосов
/ 04 марта 2014

Еще один способ сделать это: дать идентификатор форме, например «form1», затем при добавлении сообщения clientId будет «form1: test».

...