2016-03-29 19 views
3

Haben Sie eine <sj:tabbedppanel> auf einer Seite. Nach dem Timeout der Sitzung, wenn Sie versuchen, auf eine andere Registerkarte der Registerkarte mit Registerkarten zu klicken, sollte der Benutzer zur Anmeldung weitergeleitet werden. <sj:tabbed> Panel nicht feuern die onErrorTopics. Bitte lesen Sie unten und zeigen Sie mir, wie Sie dieses Problem beheben können. Ich sehe in Feuer Bug, dass der Fehler 403 geworfen wird, aber ich bin nicht in der Lage, es in Jsp zu fangen. Brauche Hilfe mit dem selben.Struts2 jquery tabbed panel on timeout keine zündungsereignisse

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> 
+0

Geben Sie Ihre Javascript-Funktion ein? Welchen Wert hat Ihr var-Status? –

+0

Nein, ich betrete die JavaScript-Funktion nicht. – user3761541

+0

Haben Sie '' in Ihrem '' '? –

Antwort

2

ich einige Test gemacht haben und hier, was finde ich.

Lets versuchen Sie eine einfache sj:div, die einige einfacher ist. Wenn Sie das httpheader Ergebnis mit status:403 benutzen, dann können Sie etwas wie verwenden:

<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); 
     } 
    }); 

Bitte nicht, dass Sie event.originalEvent.request.status

Zurück zu sj:tab ....

Die sj verwenden sollte: Registerkarte funktioniert nicht mit onAlwaysTopics oder onErrorTopics, scheint ein Fehler zu sein. Sie können jedoch onCompleteTopics oder onChangeTopics verwenden.

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

Aber Sie können httpheader Ergebnis nicht verwenden. Mit status:403 wird die loadError überhaupt nicht aufgerufen.

So können Sie onCompleteTopics in Ihrem JSP verwenden und einen JSON zurückgeben, der Sie wissen lässt, was zu tun ist.

Oder Sie verwenden

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

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

    } 

} 

Bitte nicht, dass die oben ajaxError wird für jeden ajaxError genannt werden, nicht nur, wenn Sie die Registerkarten ändern. Kann dir helfen, settings.url zu verwenden.

+0

Siehe auch [Unterscheiden zwischen Erfolgsdaten und Fehlernachrichten zur Verwendung in Struts 2] (http://stackoverflow.com/a/20857989/573032). –