来自Servlet的WebSphere门户createActionURL

时间:2018-08-07 14:48:03

标签: servlets websphere-portal

使用来自CMS的电子邮件,要求用户单击确认链接,该链接将引导他们到我们的Websphere Portal Server上的Servlet。

应该将用户重定向到向其显示成功或失败消息的portlet。从portlet到portlet,我将创建一个动作Url,添加参数并重定向用户。从Servlet执行此操作的正确方法是什么?

创建操作网址需要MimeResponse / RenderResponse,而不是HttpServletResponse。

1 个答案:

答案 0 :(得分:0)

因此您可以使用我创建的辅助类http://www.asponte.com/wps/portal/asponte/labs/blog-detail/portal%208.0%20and%208.5%20advanced%20url%20generation%20helper%20classes 并使用servlet帮助器或脱机帮助器 需要注意的几件事是,如果该Portlet /页面需要认证,并且您在认证之前就生成了URL,则无法生成该Portlet的操作阶段的URL。如果您不想使用它们,则可以像这样直接使用高级url生成api 获取PortalStateManagerHome

 this.psmsHome =  ((PortalStateManagerServiceHome)ctx.lookup("portal:service/state/PortalStateManager"));

和导航选择模型

 this.navSelHome = 
 ((NavigationSelectionModelHome)ctx.lookup("portal:service/model/NavigationSelectionModel"));

然后从那里,您可以从家中获得供应商 服务= this.psmsHome.getPortalStateManagerService(请求,响应); provider = this.navSelHome.getNavigationSelectionModelProvider(); 那么您将获得这样的网址

URLAccessorFactory urlFactory = 
      (URLAccessorFactory)mgr.getAccessorFactory(URLAccessorFactory.class);

    EngineURL url = urlFactory.newURL(request, response, mgr
      .newState(), Constants.EMPTY_COPY);

    SelectionAccessorFactory selectionFactory = 
      (SelectionAccessorFactory)mgr.getAccessorFactory(SelectionAccessorFactory.class);

    SelectionAccessorController selectionCtrl = selectionFactory
      .getSelectionAccessorController(url.getState());

    selectionCtrl.setSelection(pageName);

    selectionCtrl.dispose();
    if (portletName != null)
    {
      PortletAccessorFactory portletAccessorFactory = 
        (PortletAccessorFactory)mgr.getAccessorFactory(PortletAccessorFactory.class);

      PortletAccessorController portletCtrl = portletAccessorFactory
        .getPortletAccessorController(portletName, url.getState());

      Map parameters = portletCtrl.getParameters();
      if (params != null)
      {
        String key = null;
        Iterator paramsIterator = params.keySet().iterator();
        while (paramsIterator.hasNext())
        {
          key = (String)paramsIterator.next();
          parameters.put(key, params.get(key));
        }
      }
      portletCtrl.dispose();
    }
    return url.writeDispose(new StringWriter()).toString

这将使您可以定位portlet并传递参数 如果您要执行特定操作,则需要使用actionaccessorfactory