2016-05-15 5 views
3

セッションスコープバッキングビーンを持つxhtmlページがあります。今、新しいタブでこのページを開くには、新しいタブで右クリックしてリンクを開く必要があります。 このページを開くと、バッキングBeanのモデルクラスをクリアする必要があります。プライムフェイスの新しいタブにメニュー項目のページを開く

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

バッキングBeanコード: 私は、次のコードを使用している

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

上記のコードは、セッションスコープのモデルをクリアするが、それは新しいタブでページを開きません。

上記のコードで新しいタブでページを開く方法はありますか?または上記の問題の代替方法はありますか。すべてのヘルプは高く評価されます。 ありがとうございます。

+0

これはうまくいきませんでした。新しいタブで右クリック - オープンリンクでページを開く必要があります。関数clearDetailModel()は、直接的な左クリックでのみ呼び出されますが、右クリック - 新しいタブでのリンクを開くことでは呼び出されません。 – Kiran

+0

ユースケースとは何ですか?新しいタブでページを開くときに、** sessioscope **モデルをクリアする必要がある場合は、設計上の欠陥があります。ビュースコープのビーン、または(cdiエクステンションベースの)ウィンドウスコープを導入する – Kukeltje

+0

イメージをフォームに表示する必要があるため、セッションスコープを使用しました。セッションスコープがなければ、イメージは表示されません。 – Kiran

答えて

1

あなたはこれを試すことができます。

あなたはMemberDetails.xhtmlページに次のコードを配置する必要があります。

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

あなたのページを開くにはmenuitemでurlを使用してください。

次のようにあなたのバッキングBeanのコードを変更する必要が
<p:menuitem value="Details" url="/pages/member/MemberDetails.xhtml" /> 

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を(チェックされていない場合は、要求が新規であるかどうか)になります新しいリクエストが行われるたびに呼び出されます。

関連する問題