Struts + Back Button

时间:2016-05-24 00:08:09

标签: struts2

我的MVC是Struts 2

我的要求是在浏览器中单击后退按钮后清除首页中的一些错误消息。

顺序是: 第A页 - >第B页 - >第C页

页面B可以从页面A或从页面C导航(通过单击后退按钮)。如果页面B有错误消息,并且单击了页面C的后退按钮,则必须删除此错误消息。但我无法确定用户如何导航到Page B(考虑到上述两种方式)。

到处搜索解决方案。发现window.history不是解析上一页的可靠方法。

此外,由于带有tile的Struts 2怪癖,window.location没有改变。

令人沮丧的是浏览器后退按钮没有命中服务器。它也不处理JSP或struts标记。幸运的是,它运行了javascript。

所以我想出了一个使用服务器和客户端时间戳的自定义解决方案。它似乎适用于所有浏览器。

我想知道是否有更简单的方法。

 <%

            if (session.getAttribute("myTime") != null) {
                //server sends the time in millis on the first invocation
                Long tmStamp = Long.parseLong((String) session.getAttribute("myTime"));
                // out.println(tmStamp);
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 Date javaDt = new Date();
                 javaDt.setTime(tmStamp);
                // out.println(" " +  sdf.format(javaDt));
                 Date clientDt = new Date();
                 Long clientMillis = clientDt.getTime();
                 Long timeDiff = clientMillis -tmStamp;
         %>
                <script>
                var currDt = new Date().getTime();
                var dt = new Date(<%= tmStamp%>);
                dt.setTime(<%=tmStamp%>);
                var jsDt = new Date();
                jsDt.setTime(currDt);
                //alert( "<%= tmStamp %>" + " javascript time=" + (currDt - dt.getTime()) + ' timeDiff=' + (1 * <%= timeDiff%>) + " " +  jsDt  + " " + dt);
                //we expect the server to repond within 5 seconds
                if (currDt  > (<%= tmStamp %> + (1*<%= timeDiff %>) +  5*1000)) {
                    //alert("referer is summary" )
                    clearError();
                } else {
                    //alert("referer is not summary");
                 <s:if test="flag == 'none'">
                    $('<tr><td align="center"> <font color="red" style="font-size:14px;font-family:"sans-serif, Arial, Helvetica";height:20px;width:180px; font-weight:bold;" ><blink>No Result found for the given Search Criteria</blink></font></td></tr>')
                        .insertAfter("#lastRow");
                    $('<tr><td align="center"> <font style="font-size:14px;font-family:"sans-serif, Arial, Helvetica";height:20px;width:180px; font-weight:bold;" ><blink>No Result found for the given Search Criteria</blink></font></td></tr>')
                    .insertBefore("#firstRow");
                </s:if>
                }
                </script>
        <% } else {
            out.println("No session attribute for myTime");
        }
        %>

0 个答案:

没有答案