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に送信されますが、特定の形式の特定のIDに送信されます。これどうやってするの? (検証Beanまたは検証メソッドを実装しない場合-検証例外をスローしないことを意味します)。
いわゆる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>
これにより、例で使用されているoutputTextコンポーネントのコンテンツ「Test msg」を含むFacesメッセージが追加されます。
これを行う別の方法は、「form1」のようにフォームにIDを指定し、メッセージを追加するときにclientIdが「form1:test」になることです。