在primefaces的新选项卡中打开menuitem页面

时间:2016-05-15 10:50:40

标签: jsf primefaces tabs menuitem

我有一个带有会话作用域辅助bean的xhtml页面。现在我必须在新选项卡中打开此页面,并在新选项卡中右键单击打开链接。 打开此页面时,必须清除辅助bean的模型类。 我使用了以下代码:

<p:menuitem value="Details" action="#{beanMB.clearDetailModel()}"/>

支持bean代码:

public void clearDetailModel()
    {
        memberModel=null;
        ......
        return "/pages/member/MemberDetails.xhtml?faces-redirect=true";
   }

上面的代码清除会话范围模型,但它不会在新选项卡中打开页面。

是否有任何方法可以使用上面的代码在新标签页中打开页面,或者是否有其他方法可以解决上述问题?。非常感谢。 谢谢。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

您需要将以下代码放在MemberDetails.xhtml页面中。

<f:metadata>
<f:event type="preRenderView" listener="#{beanMB.clearDetailModel}"/>
</f:metadata>

并在menuitem中使用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()。