【问题标题】:Struts2 jquery tabbed panel on timeout not firing eventsStruts2 jquery选项卡式面板超时不触发事件
【发布时间】:2016-03-29 07:41:07
【问题描述】:

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

【问题讨论】:

  • 你输入你的javascript函数了吗?您的 var status 的值是多少?
  • 不,我没有进入javascript函数。
  • 您的&lt;head&gt; 中有&lt;sj:head/&gt; 吗?
  • 是的,我愿意。我能够很好地显示标签面板。现在尝试实现会话超时并在处理它时遇到问题。我可以看到拦截器工作正常,服务器发回 403 结果,但客户端没有进入 java 脚本函数。
  • 您可以尝试在参数中使用“状态”而不是“错误”吗?

标签: java jsp struts2 http-headers struts2-jquery


【解决方案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:tab 不适用于onAlwaysTopicsonErrorTopics,似乎是一个错误。但是您可以使用onCompleteTopicsonChangeTopics

<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 可以提供帮助。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
相关资源
最近更新 更多