ICEfaces
  1. ICEfaces
  2. ICE-3668

ice:message not displayed when using Spring Web Flow

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.7.2
    • Fix Version/s: 1.8DR#2, 1.8
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      ICEfaces 1.7.2, SWF 2.0.3

      Description

      After some more debugging on the problem I have noticed that the BridgeFacesContext never hold any messages because they are added to the FlowFacesContext which is the Spring Web Flow version of the FacesContext. All phases of the JSF lifecycle except for RENDER_RESPONSE is handled by the FlowFacesContext.

      When entering the RENDER_RESPONCE phase the FlowFacesContext is unwrapped to a BridgeFacesContext by the following code:

      Code:
        public static FacesContext unwrap(FacesContext facesContext) {
               if (facesContext instanceof BridgeFacesContext) {
                   return facesContext;
               }
               FacesContext result = facesContext;
               try {
                   Method delegateMethod = facesContext.getClass()
                           .getDeclaredMethod("getDelegate", new Class[]{});
                   delegateMethod.setAccessible(true);
                   Object delegate = delegateMethod
                           .invoke(facesContext, (Object[]) null);
                   if (delegate instanceof BridgeFacesContext) {
                       result = (FacesContext) delegate;
                       if (log.isDebugEnabled()) {
                           log.debug("BridgeFacesContext delegate of " + facesContext);
                       }
                   }
               } catch (Exception e) {
               }
       
               return result;
           }
       


      The FacesMessages that were added to the FlowFacesContext are never passed on to the BridgeFacesContext.

      I therefore made a small change to the unwrap method:
      Code:
         public static FacesContext unwrap(FacesContext facesContext) {
               if (facesContext instanceof BridgeFacesContext) {
                   return facesContext;
               }
               FacesContext result = facesContext;
               try {
                   Method delegateMethod = facesContext.getClass()
                           .getDeclaredMethod("getDelegate", new Class[]{});
                   delegateMethod.setAccessible(true);
                   Object delegate = delegateMethod
                           .invoke(facesContext, (Object[]) null);
                   if (delegate instanceof BridgeFacesContext) {
                       result = (FacesContext) delegate;
                        //patch start : getting the faces messages from the FlowFacesContext
                       Iterator clientIdIterator = facesContext.getClientIdsWithMessages();
                       while(clientIdIterator.hasNext()){
                        String clientId = (String)clientIdIterator.next();
                        Iterator facesMessagesForClientId = facesContext.getMessages(clientId);
                        while(facesMessagesForClientId.hasNext()){
                        FacesMessage message = (FacesMessage)facesMessagesForClientId.next();
                        result.addMessage(clientId, message);
                        }
                       }
                       // patch end.
                       if (log.isDebugEnabled()) {
                           log.debug("BridgeFacesContext delegate of " + facesContext);
                       }
                   }
               } catch (Exception e) {
               }
       
               return result;
           }
       

        Activity

        Ted Goddard created issue -
        Ted Goddard made changes -
        Field Original Value New Value
        Fix Version/s 1.8DR#2 [ 10142 ]
        Assignee Deryk Sinotte [ deryk.sinotte ]
        Deryk Sinotte made changes -
        Assignee Deryk Sinotte [ deryk.sinotte ] Greg Dick [ greg.dick ]
        Deryk Sinotte made changes -
        Assignee Priority P2
        Greg Dick made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Ken Fyten made changes -
        Fix Version/s 1.8 [ 10161 ]
        Assignee Priority P2
        Ken Fyten made changes -
        Status Resolved [ 5 ] Closed [ 6 ]
        Assignee Greg Dick [ greg.dick ]
        Tyler Johnson made changes -
        Resolution Fixed [ 1 ]
        Status Closed [ 6 ] Reopened [ 4 ]
        Assignee Greg Dick [ greg.dick ]
        Tyler Johnson made changes -
        Salesforce Case [5007000000F4WUG]
        Tyler Johnson made changes -
        Salesforce Case [5007000000F4WUG] []
        Tyler Johnson made changes -
        Status Reopened [ 4 ] Closed [ 6 ]
        Resolution Fixed [ 1 ]

          People

          • Assignee:
            Greg Dick
            Reporter:
            Ted Goddard
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: