Jonathan,
First of all, I cc'd this to the bridges-user mailing list so we can continue
the discussion there.
(if you haven't subscribed yet: 
http://portals.apache.org/bridges/mail-lists.html)

It is not clear to me *what* is not working with the example you provided.
Do you get an exception/stacktrace or is the ContainerConstants.PORTLET_REQUEST 
not
set?

In the latter case, it might be a case of which version of the struts-bridge you
are using. Since august 8, the struts-bridge trunk now *does* provide the
"javax.portlet.request" attribute, even when accessed from an ActionRequest.
See: http://issues.apache.org/jira/browse/PB-2.
To be able to use it, you need to checkout and build the bridges yourself.

If you get an exception, could you please provide that?

Note: Using ContainerConstants.PORTLET_REQUEST (instead of 
"javax.portlet.request")
binds you to the jetspeed-commons jar. If you really want to be JSR-168 
compliant,
you should *not* use jetspeed-commons.

Regards,

Ate


[EMAIL PROTECTED] wrote:
I am trying integrate a Struts Portlet using Struts Bridge and an
InterPortlet Communication library,
http://www.doc.ic.ac.uk/~mo197/portlets/portlet_messaging/crosscontext.php ,
which works well with ordinary portlets.

The library requires that I retrieve the PortletRequest / ActionRequest /
RenderRequest. However within my Struts Portlet I only action and form
classes and with execute I only have httpServletRequest available. Given
that my action classes are running within s struts portlet how can I
retrieve the PortletRequest that I need.

The following code shows a simple portlet that works fine.

public class Portlet1 extends GenericPortlet{


        protected void doEdit(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
                String id = this.getInstanceID(request);
        String msg_session_id = MessageHelper.getSessionID(request);
                MessageHelper.loadPrefs(request, id, msg_session_id);
                MessageUtils.prepareMappingForm(request, id, msg_session_id);

getPortletContext().getRequestDispatcher("/WEB-INF/pages/edit_mappings.jsp").include(request,response);
        }


        protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
                String id = this.getInstanceID(request);
        String msg_session_id = MessageHelper.getSessionID(request);
                MessageHelper.loadPrefs(request, id, msg_session_id);

                response.setContentType("text/html");
                PrintWriter out = response.getWriter();

                PortletURL aURL = response.createActionURL();
                aURL.setParameter("ACTION", "sendmsg");

                out.println("<b>Message Session ID:</b> 
"+msg_session_id+"<br/>");
                out.println("<b>Portlet App:</b> 
"+request.getContextPath()+"<br/>");

                out.println("<b>Portlet1</b>:<br/>");
                out.println("<a href=\""+aURL+"\">send message</a><br/><br/>");

                MessageHelper msgh = new 
MessageHelper(request.getPortletSession(true),
id, msg_session_id);
                String msg = (String)msgh.get("a_val");
                out.println("my a_val msg: "+msg);

        }

        public void processAction(ActionRequest request, ActionResponse 
response)
throws PortletException, IOException {
                String id = this.getInstanceID(request);
        String msg_session_id = MessageHelper.getSessionID(request);
                MessageHelper.loadPrefs(request, id, msg_session_id);


                if (request.getPortletMode().equals(PortletMode.EDIT)) {
                                MessageUtils.processMappingForm(request, 
response, id, msg_session_id);
                }

                if ("sendmsg".equals(request.getParameter("ACTION"))){
                        System.out.println("try sending message from Portlet 1 
in webapp
"+request.getContextPath());
                        MessageHelper msgh = new 
MessageHelper(request.getPortletSession(true),
id, msg_session_id);
                        msgh.send("a_val", "this is a message from Portlet1 in 
portlet webapp
"+request.getContextPath());
                }
        }

        public String getInstanceID(PortletRequest request){
                return "Portlet1."+MessageHelper.getPortletID(request);
        }


}


Hopefully from that you can see what I am trying to retrieve from within my
action class. The following is my current execute method

logger = Logger.getLogger("Cedar-Portlets");

                logger.debug("SetURLAction::execute - starting");

                try {


                        ActionRequest actionRequest = (ActionRequest) request
                                        
.getAttribute(ContainerConstants.PORTLET_REQUEST);
                        String id = this.getInstanceID(actionRequest);
                        String msg_session_id = 
MessageHelper.getSessionID(actionRequest);
                        MessageHelper.loadPrefs(actionRequest, id, 
msg_session_id);
                        MessageHelper msgh = new MessageHelper(actionRequest
                                        .getPortletSession(true), id, 
msg_session_id);
                        msgh.send("a_val",
                                        "this is a message from SetURLAction in 
portlet webapp "
                                                        + 
actionRequest.getContextPath());

                } catch (RuntimeException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        return mapping.findForward("failure");
                }
                return mapping.findForward("success");




Which doesn't work, any ideas would be greatly appreciated.

Jon Hawkins



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








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

Reply via email to