Подтвердить что ты не робот

Как добавить сообщение к определенному компоненту из поддержки JSF bean

У меня есть h: inputText и связанное с ним h: сообщение:

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

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

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

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

4b9b3361

Ответ 1

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

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

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

@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, используемого в примере.

Ответ 2

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