With your help I've made an improvement to the implementation in wiki page.

Before calling nonFacesRequest I call an action of an bean called PortletBackBean.
If this bean is not declared in managed beans, no method is called.
I'm showing only doEdit, but the same can be applied to doView.


public void doEdit(RenderRequest request, RenderResponse response)throws PortletException, IOException { Boolean isPortletModeChanged = (Boolean)request.getAttribute(ATTR_PORTLET_MODE_CHANGED);

      if (isPortletModeChanged.booleanValue()) {
          response.setContentType("text/html");

           FacesContext fctx = facesContext(request, response);
           if(fctx!=null){
MethodBinding mb = fctx.getApplication().createMethodBinding("#{PortletBackBean.edit}", null);
               if(mb!=null){
                   try{
                       Object methodResult = mb.invoke(fctx, null);
                   }catch(PropertyNotFoundException e){
/* if the managed bean is not faound ignore the calling*/
                   }
               }
           }

          nonFacesRequest(request, response, defaultEdit);
return;
      }

      facesRender(request, response);
   }




Dave Brondsema wrote:

Patrick Dalla Bernardina wrote:
How can I call an managed bean action when portlet mode (EDIT,VIEW) is
changed and process the navigation rules to discover the page to be
rendered?

You can use http://wiki.apache.org/myfaces/UsingPortletModes as a
starting point.

To invoke a managed bean action, something like this will work I think:

ValueBinding binding =
FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myBean.someAction}");
Object methodResult = binding.getValue(FacesContext.getCurrentInstance());



Reply via email to