1

目标是使用以下代码创建 Portlet 的 URL:

ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
RenderResponse response = (RenderResponse)ctx.getResponse();
PortletURL portletUrl = response.createRenderURL();
String url = portletUrl .toString();

但是,如果我在支持 bean 的 JSF-actionListener 方法中调用它,我会得到一个,ClassCastException因为ctx.getResponse()给了我一个javax.portlet.ActionResponse

我知道 aRenderResponse可以从doViewPortlet 类中的方法访问。但是我怎样才能在我的支持 bean 中访问它呢?

4

2 回答 2

1

我想将链接放入将用户引导至 portlet 的电子邮件中。我正在使用 WebSphere Portal 6.1。

在 portlet 生命周期的那个时刻,呈现 URL 通常不可用。

  1. 考虑使用URL 映射功能
  2. 考虑使用带有URL 引擎服务的 servlet来执行重定向

在这两种情况下,您都不需要通常由 Portal 生成的巨大的编码 URL;你使用类似的东西http://host/foo/bar作为你的入口点。

我在生产中使用了第二种方法。将唯一名称添加到目标页面和 portlet 实例以便于查找。这些是通过 XMLAccess 脚本添加到页面配置中的——它们在 6.1 版中无法通过管理用户界面使用。

于 2012-08-03T13:27:27.563 回答
0

我现在使用以下方法,这会导致一些(非常少的)工作负载开销,但效果很好:

  • 抓住方法RenderResponse_doView
  • 在 portlet 会话中使用PortletURL portletUrl = response.createRenderURL();和存储这个对象(我知道,对于每个请求)。
  • 在您的动作侦听器方法中,检索PortletURL对象,附加必要的参数并呈现 URL。
于 2012-08-07T09:00:48.573 回答