Панель вкладок jquery в Struts2 по тайм-ауту не запускает события

Есть <sj:tabbedppanel> на странице. После истечения времени ожидания при попытке перейти на другую вкладку панели с вкладками пользователь должен перенаправить на страницу входа. <sj:tabbed> панель не стреляет onErrorTopics, Пожалуйста, посмотрите ниже и объясните мне, как решить эту проблему. В огне я вижу ошибку 403, но не могу ее перехватить в jsp. Нужна помощь с тем же.

struts.xml

    <action name="secondPanel" class="com.xxx.secondPanelAction">
        <interceptor-ref name="sampleDefaultStack" />

        <result>/jsp/secondPanel.jsp</result> 
        <result name="login" type="httpheader">
            <param name="error">403</param>
            <param name="errorMessage">User session expired      </param>
        </result>
    </action>

JSP

<sj:tabbedpanel id="remotetabs" selectedTab="0" show="true"   hide="'fade'" collapsible="true" sortable="true" onErrorTopics="loadError">
    <sj:tab id="tab2" href="%{createUrl}" key="label.create" onErrorTopics="loadError"/>
    <sj:tab id="tab1" href="%{updateUrl}" key="label.update" onErrorTopics="loadError"/>
</sj:tabbedpanel>

<script type="text/javascript" >
    $(document).ready(function() {  
      $.subscribe('loadError', function(event, data) { alert('in error');
      var status = event.originalEvent.status;

      if(status == 403 ) {
          window.location.href = "/Sample/login.action";
      }
    }); 
</script>

1 ответ

Решение

Я сделал несколько тестов и вот что я нахожу.

Давайте попробуем простой sj:div что несколько проще. Если вы используете httpheader результат с status:403 тогда вы можете использовать что-то вроде:

<sj:div href="/security/login.ib" onErrorTopics="loadError" targets="test">Test</sj:div>

  $.subscribe('loadError', function(event, data) {
      alert('some error happend');
      if(event.originalEvent.request.status){
          var status = event.originalEvent.request.status;
          alert(status);
      }
  });

Пожалуйста, не то, что вы должны использовать event.originalEvent.request.status

Вернуться к sj:tab....

Вкладка sj: не работает с onAlwaysTopics или же onErrorTopicsВроде бы ошибка. Однако вы можете использовать onCompleteTopics или, может быть onChangeTopics,

<sj:tabbedpanel id="remotetabs" show="true"   hide="'fade'" collapsible="true" sortable="true" onCompleteTopics="loadError" >

Но вы не можете использовать httpheader результат. С status:403, loadError не будет звонить вообще.

Так что вы можете использовать onCompleteTopics в вашем JSP и верните JSON, который даст вам знать, что должно быть сделано.

Или вы можете использовать

$(document).ajaxError( function(e, xhr, settings, exception) {

   if (xhr.status == 403) {
      //Do what you want

   }

}

Пожалуйста, не то, что выше ajaxError будет призван для каждого ajaxError, а не только при смене вкладок. Может быть, вы используете settings.url может помочь.

Другие вопросы по тегам