2016-05-15 2 views
3

У меня есть xhtml-страница с сеансом связи бэк-бэн. Теперь мне нужно открыть эту страницу на новой вкладке, нажав правую кнопку мыши на новой вкладке. Когда эта страница открывается, класс модели бэкэнда должен быть очищен. Я использовал следующий код:открыть страницу menuitem в новой вкладке в сетках

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

бэк-код боба:

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

Приведенный выше код очищает сессионный область действия модели, но она не открывает страницу в новой вкладке.

Есть ли способ открыть страницу на новой вкладке с указанным выше кодом или есть альтернативный способ для вышеуказанной проблемы?. Любая помощь будет оценена. Спасибо.

+0

Это не сработало, мне нужно открыть страницу с помощью правого клика - открыть ссылку в новой вкладке. Функция clearDetailModel() вызывается только с прямым щелчком левой кнопкой мыши, но не с правом щелчка - открывать ссылку на новой вкладке. – Kiran

+0

Что такое usecase? Если вам нужно очистить ** sessioscope ** d model при открытии страницы на новой вкладке, у вас есть дефект дизайна. Либо введите viewcoped bean, либо даже область расширения на основе cdi. – Kukeltje

+0

Я использовал область сеанса, потому что мне нужно отобразить изображение в форме. Без области сеанса изображение не отображается. – Kiran

ответ

1

Вы можете попробовать это:

Вы должны поместить следующий код в MemberDetails.xhtml странице.

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

и использовать url в menuitem, чтобы открыть страницу.

<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() будет каждый раз, когда выполняется новый запрос.

Смежные вопросы