Monday, October 03, 2011

ADF 11g Quicky 3 : Adding Error, Info and Warning messages

How can we add a message programatically ? Last week I got this question for the second time in a months time. I decided to write a short blogpost on how this works.

Adding messages is very easy, you just need to know how it works.
You can add a message to your faces context by creating a new FacesMessage. Set the severity (ERROR, WARNING, INFO or FATAL ), set the message text, and if nessecary a message detail. The fragment below shows the code for an ERROR message.

1:   public void setMessagesErr(ActionEvent actionEvent) {  
2: String msg = "This is a message";
3: AdfFacesContext adfFacesContext = null;
4: adfFacesContext = AdfFacesContext.getCurrentInstance();
5: FacesContext ctx = FacesContext.getCurrentInstance();
6: FacesMessage fm =
7: new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, "");
8: ctx.addMessage(null, fm);
9: }


I created a simple page with a couple of buttons to show the result of setting the message. When the button is pressed the message is shown.
1:  <?xml version='1.0' encoding='UTF-8'?>  
2: <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
3: xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
4: xmlns:f="http://java.sun.com/jsf/core">
5: <af:inputText label="Label 1" id="it1"></af:inputText>
6: <af:inputText label="Label 2" id="it2"
7: binding="#{pageFlowScope.msgsBean.showMessage}"></af:inputText>
8: <af:inputText label="Label 3" id="it3"></af:inputText>
9: <af:commandButton text="error" id="cb1"
10: actionListener="#{pageFlowScope.msgsBean.setMessagesErr}"/>
11: <af:commandButton text="info" id="cb2"
12: actionListener="#{pageFlowScope.msgsBean.setMessagesInf}"/>
13: <af:commandButton text="warn" id="cb3"
actionListener="#{pageFlowScope.msgsBean.setMessagesWrn}"/>
14: 15: actionListener="#{pageFlowScope.msgsBean.setMessagesFat}"/>
16: <af:commandButton text="warn for comp" id="cb4"
17: actionListener="#{pageFlowScope.msgsBean.setMessagesWrnForComp}"/>
18: </jsp:root>



A special case is the message that is directly related to a component. For that I use the button that calls the "setMessageForComp" method combined with an inputtext field that is bound to a bean : binding="#{pageFlowScope.msgsBean.showMessage}.
The code behind this button is slightly different from the one show in the java fragment earlier. The important part is that the message is specifically added to the component : getShowMessage().getClientId(ctx).

1:   public void setMessagesWrnForComp(ActionEvent actionEvent) {  
2: // Add event code here...c
3: String msg = "This is a message";
4: AdfFacesContext adfFacesContext = null;
5: adfFacesContext = AdfFacesContext.getCurrentInstance();
6: FacesContext ctx = FacesContext.getCurrentInstance();
7: FacesMessage fm =
8: new FacesMessage(FacesMessage.SEVERITY_WARN, msg, "");
9: ctx.addMessage(getShowMessage().getClientId(ctx), fm);
10: }
11: public void setShowMessage(RichInputText showMessage) {
12: this.showMessage = showMessage;
13: }
14: public RichInputText getShowMessage() {
15: return showMessage;
16: }
17: public void setMessagesWrnForComp(ActionEvent actionEvent) {
18: // Add event code here...c
19: String msg = "This is a message";
20: AdfFacesContext adfFacesContext = null;
21: adfFacesContext = AdfFacesContext.getCurrentInstance();
22: FacesContext ctx = FacesContext.getCurrentInstance();
23: FacesMessage fm =
24: new FacesMessage(FacesMessage.SEVERITY_WARN, msg, "");
25: ctx.addMessage(getShowMessage().getClientId(ctx), fm);
26: }
27: public void setShowMessage(RichInputText showMessage) {
28: this.showMessage = showMessage;
29: }
30: public RichInputText getShowMessage() {
31: return showMessage;
32: }





The code for this quicky can be downloaded here.

1 comment:

Mikeyoakes said...

Gret piece Luc - I needed to quickly find something for adding an In Context Error Message on the ADF BPM Task Flow screen I am working on and this helped greatly. Keep up the great work - it is appreciated.