在 primefaces 的新选项卡中打开菜单项页面
open a menuitem page in a new tab in primefaces
我有一个带有 会话范围 支持 bean 的 xhtml 页面。现在我必须在新标签页中打开此页面,右键单击在新标签页中打开 link。
当此页面打开时,必须清除支持 bean 的模型 class。
我使用了以下代码:
<p:menuitem value="Details" action="#{beanMB.clearDetailModel()}"/>
支持 bean 代码:
public void clearDetailModel()
{
memberModel=null;
......
return "/pages/member/MemberDetails.xhtml?faces-redirect=true";
}
上面的代码清除了会话范围的模型,但它没有在新选项卡中打开页面。
是否有任何方法可以使用上述代码在新标签页中打开页面,或者是否有其他方法可以解决上述问题?如有任何帮助,我们将不胜感激。
谢谢。
你可以试试这个:
您需要在 MemberDetails.xhtml 页面中输入以下代码。
<f:metadata>
<f:event type="preRenderView" listener="#{beanMB.clearDetailModel}"/>
</f:metadata>
并在菜单项中使用 url 打开您的页面。
<p:menuitem value="Details" url="/pages/member/MemberDetails.xhtml" />
您需要修改您的支持 bean 代码如下:
public void clearDetailModel()
{
if (isNewRequest()){
memberModel=null;
......
}
}
public boolean isNewRequest() {
final FacesContext fc = FacesContext.getCurrentInstance();
final boolean getMethod = ((HttpServletRequest) fc.getExternalContext().getRequest()).getMethod().equals("GET");
final boolean ajaxRequest = fc.getPartialViewContext().isAjaxRequest();
final boolean validationFailed = fc.isValidationFailed();
return getMethod && !ajaxRequest && !validationFailed;
}
这里的方法 isNewRequest() 检查请求是否是新的,如果没有检查,你的方法 clearDetailModel() 将在每次发出新请求时被调用。
我有一个带有 会话范围 支持 bean 的 xhtml 页面。现在我必须在新标签页中打开此页面,右键单击在新标签页中打开 link。 当此页面打开时,必须清除支持 bean 的模型 class。 我使用了以下代码:
<p:menuitem value="Details" action="#{beanMB.clearDetailModel()}"/>
支持 bean 代码:
public void clearDetailModel()
{
memberModel=null;
......
return "/pages/member/MemberDetails.xhtml?faces-redirect=true";
}
上面的代码清除了会话范围的模型,但它没有在新选项卡中打开页面。
是否有任何方法可以使用上述代码在新标签页中打开页面,或者是否有其他方法可以解决上述问题?如有任何帮助,我们将不胜感激。 谢谢。
你可以试试这个:
您需要在 MemberDetails.xhtml 页面中输入以下代码。
<f:metadata>
<f:event type="preRenderView" listener="#{beanMB.clearDetailModel}"/>
</f:metadata>
并在菜单项中使用 url 打开您的页面。
<p:menuitem value="Details" url="/pages/member/MemberDetails.xhtml" />
您需要修改您的支持 bean 代码如下:
public void clearDetailModel()
{
if (isNewRequest()){
memberModel=null;
......
}
}
public boolean isNewRequest() {
final FacesContext fc = FacesContext.getCurrentInstance();
final boolean getMethod = ((HttpServletRequest) fc.getExternalContext().getRequest()).getMethod().equals("GET");
final boolean ajaxRequest = fc.getPartialViewContext().isAjaxRequest();
final boolean validationFailed = fc.isValidationFailed();
return getMethod && !ajaxRequest && !validationFailed;
}
这里的方法 isNewRequest() 检查请求是否是新的,如果没有检查,你的方法 clearDetailModel() 将在每次发出新请求时被调用。