Панель вкладок 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
может помочь.