使用jsf重定向到liferay中portlet内的另一个页面的方法是什么?我一直在尝试通过 javascript window.location.href 但它尝试重定向页面而不是门户。
1 回答
这取决于您要重定向到哪个页面。
重定向到另一个 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:commandLink
or调用链接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>