概括
在我们的 Web 应用程序中,当用户点击“比页面加载更快”时,显然浏览器向用户显示了第一个请求(根据我们得到的一些错误消息)。我原以为这是第二个请求。
更多背景信息
我们有一个 Struts1 Web 应用程序。在用户会话中,我们放置了用户交互的当前上下文。
request.getSession().setAttribute("context", <something>);
例如,应用程序显示主记录列表,上下文包含有关用户的信息。当用户单击主记录时,我们将有关该记录的信息保存在用户会话对象中。在 JSP 中,我们经常将上下文对象分配给一个局部变量。这需要转换为特定类型(例如MasterRecordDTO
or UserDTO
):
<% MasterRecordDTO dto = (MasterRecordDTO) request.getSession().getAttribute("context"); %>
然后,用户可以深入了解该主记录的详细信息视图。我们有一个显示 sth like 的面包屑list > master > detail
。这些是链接,因此用户可以使用面包屑导航。
现在,当在这种情况下,用户首先单击“master”并且足够快地单击“list”时,他会收到一个 ClassCastException 说
"UserDTO cannot be cast to MasterRecordDTO"
在 MasterRecord-JSP 中,这意味着当 MasterRecord-JSPdto
在第一次请求中分配变量时,第二次请求已经将会话context
属性设置为UserDTO
对象。
问题
我原以为浏览器会“放弃”第一个请求并向用户显示第二个请求的结果(本例中的主记录列表)。有人可以向我解释一下吗?
更新
面包屑链接位于另一个 HTML 框架中。我们在 Internet Explorer 7 上遇到了这个问题。我在 Firefox 11 上进行了尝试,但显然它甚至没有提交第二次点击。