我有一个带有 ac:redirect 标记的 JSP 文件,它会沿着用户转发到另一个页面。
<!-- Yes, I know this loop is probably unnecessary, but I'm not fluent in jsp and have determined it is not the problem. :) -->
<c:if test="${cmd.numberOfResults == 1}">
<c:forEach items="${cmd.matches}" var="someVar">
<c:redirect url="/loadThatResultInfo.html"/>
</c:forEach>
</c:if>
命令对象的旧实现需要更新(我进来的地方)。我这样做的方式是创建一个通用的“搜索结果”对象,其中包含该旧对象的一个实例(目前)。我通过该通用类中的属性获取该实例,所以我的代码现在是这样的:
<c:if test="${cmd.genericSearchObject.numberOfResults == 1}">
<c:forEach items="${cmd.genericSearchObject.matches}" var="acct">
<jsp:forward page="/loadThatResultInfo.html"/> <!-- new try! -->
<c:redirect url="/loadThatResultInfo.html"/> <!-- old try... -->
<% response.sendRedirect("/loadThatResultInfo.html"); %> <! new try! -->
</c:forEach>
</c:if>
这三个尝试中的每一个都会导致某种 IllegalStateExceptions。 为什么此更改会导致异常,特别是考虑到所涉及的行——重定向,而不是更改/绑定的类实例——导致问题?
相应地进行了后端更改,在我的新包含的“通用”类中引用该属性以满足旧功能。我知道这是可行的,因为除了我所写的内容之外,所有相关功能都可以使用。
在线研究表明: - 提交后我无法重定向/转发。那我以前是怎么做到的呢?- 尝试刷新已清除的缓冲区会导致此问题。与旧的(第一个)实施相比,是什么改变使它现在被清除了?- 页面缓冲区的大小需要更大。这是一个我不理解的问题,并且非常希望 stackoverflow 社区能够解决这个问题;我可以看到我的新类导致需要处理更改的大小更改。
-------- 另一个答案!--------
首先,始终按照标记答案的描述在代码中设置情况。但是......如果你被卡住并且不想这样做,这里有一个快速修复:javascript!
<script type="text/javascript">
location='./yourPageToGoTo.html'
</script>