在页面上输入<sj:tabbedppanel>
会话超时后,尝试单击选项卡式面板的另一个选项卡时,应将用户重定向到登录表。<sj:tabbed>面板不触发onErrorTopics。请参阅下文,并指导我如何解决此问题。我在 Firebug 错误中看到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>

最佳答案

我做了一些测试,然后在这里找到了。

让我们尝试一个简单的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:tab不适用于onAlwaysTopicsonErrorTopics,似乎是一个错误。但是,您可以使用onCompleteTopics,也可以是onChangeTopics
<sj:tabbedpanel id="remotetabs" show="true"   hide="'fade'" collapsible="true" sortable="true" onCompleteTopics="loadError" >

但是您不能使用httpheader结果。使用status:403,根本不会调用loadError

因此,您可以在jsp中使用onCompleteTopics并返回一个json,让您知道应该怎么做。

或者你可以使用
$(document).ajaxError( function(e, xhr, settings, exception) {

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

   }

}

请注意,不仅更改标签时,每个ajaxError都会调用上述ajaxError。可能是您使用settings.url可以帮助您。

09-12 05:19