1

使用jsf重定向到liferay中portlet内的另一个页面的方法是什么?我一直在尝试通过 javascript window.location.href 但它尝试重定向页面而不是门户。

4

1 回答 1

4

这取决于您要重定向到哪个页面。

  • 重定向到另一个 portlet 的第一页。

    假设您有portlet1,并且您想从portlet1 重定向到portlet2。如果 portlet2 的 URL 是 http:/yourDomain/ web/portal/portlet2那么下面的代码将从 portlet1 重定向到 portlet2 的第一页

    FacesContext context = FacesContext.getCurrentInstance(); javax.faces.context.ExternalContext externalContext = context.getExternalContext(); externalContext.redirect("/web/portal/portlet2");

上面的代码将命中 portlet2 并取决于您的欢迎页面配置(在您的第一页中phaselistener或在portlet.xml您的第一页中将显示。

  • 从 Portlet1 重定向到 Portlet2 的其他页面(而不是欢迎页面)。

假设您想从 Portlet1 重定向到 Portlet2 的第三页。在这种情况下,使用上面的代码可以点击 Portlet2。这将调用PhaseListenter. 在这里,您可以检查要重定向到哪个页面,并相应地使用以下代码。

if(someConditionIsMet)
{   
 FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot newPage = context.getApplication().getViewHandler().createView(context,"/your3rdPage.jsf");
 context.setViewRoot(newPage);
context.renderResponse();
}  
  • 重定向到同一 Portlet 中的某个页面

我认为您不是在寻找此案的答案。不过,我认为我对你的问题并不完全清楚。

假设您正在通过h:commandLinkor调用链接h:commandButton。你正在调用一个方法(它返回String)。然后可以使用下面的代码。

public String someMethod()
{
 //Do your checks here
return "success";
  }

这必须在您的faces-config.xml文件中进行配置。

<navigation-rule>
  <navigation-case>
   <from-outcome>success</from-outcome>
   <to-view-id>/yourRequiredPage.jsf</to-view-id>
  </navigation-case>
</navigation-rule>
于 2012-12-24T03:27:23.177 回答