FacesMessages are not displayed in the same order as the are added
------------------------------------------------------------------

                 Key: PB-80
                 URL: https://issues.apache.org/jira/browse/PB-80
             Project: Portals Bridges
          Issue Type: Improvement
          Components: jsf
    Affects Versions: 1.0.3
         Environment: WebSphere Portal 6.0, MyFaces 1.1.5, Portals Bridges 1.0.3
            Reporter: Peter Bødskov


In a BackingBean we have validation along the lines of this:

if( ! validator.isTextValid(getText1())){
   FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "this is 
message no 1", "this is message no 1");
   getFacesContext().addMessage(compId, msg);
}

if( ! validator.isTextValid(getText2())){
   FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "this is 
message no 2", "this is message no 2");
   getFacesContext().addMessage(compId, msg);
}

if( ! validator.isTextValid(getText3())){
   FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "this is 
message no 3", "this is message no 3");
   getFacesContext().addMessage(compId, msg);
}

Where getText()1, getText2() and getText3() retireves the value of 3 text 
fields from a form.

This results in 3 messages being added to FacesContext in the order:
this is message no 1 
this is message no 2 
this is message no 3 

But, when these messages are displayed in a JSP page in a h:messages tag, 
they're displayed in this order:
this is message no 3 
this is message no 2 
this is message no 1

The reason for this is found in the saveFacesMessages method from the 
FacesPortlet

if (msgs != null && msgs.hasNext()) {
            Map facesMsgs = new HashMap();
            ...
            ...
 session.setAttribute("FACES_MESSAGES", facesMsgs);

When the HashMap facesMsgs is stored on the session, the order of the 
FacesMessage elemets in facesMsgs will be mixed. Therefore, when the messages 
are retrieved again in the method restoreFacesMessages, the order of the 
messages is no longer the same as when they was added from FacesContext to 
facesMsgs.

I've tried replacing:

Map facesMsgs = new HashMap();

with

Map facesMsgs = new LinkedHashMap();

in saveFacesMessages, and that did the trick for me :-)



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to