我正在尝试在列表项中设置会话参数onclick call,例如:
<div id="menu">
<ul>
<li class="menuClass" onclick="<% session.setAttribute( "currentPage", "firstPage"); %>">First page</a></li>
<li class="menuClass" onclick="<% session.setAttribute( "currentPage", "secondPage"); %>"><a href="/index.jsp">Second page</a></li>
</ul>
然而,即使没有点击,这也会导致第二页一直显示。这种方法是否合法,还是有另一种方法来更改会话变量并刷新列表项中的页面?
答案 0 :(得分:2)
调用JSP页面时,会按以下顺序发生以下情况:
因此,您的声明:session.setAttribute
在HTML发送给用户之前执行,并且确实完成,currentPage
始终设置为secondPage
。
如何验证?
在div
之前添加以下行并查看其打印内容。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:out value="${sessionScope.currentPage }" />
右键单击浏览器并查看视图源。 onclick
属性中没有任何内容,因为setAttribute
被创建为单独的命令,并在页面发送给您之前执行。
<li class="menuClass" onclick="">
您可以尝试如下所示将其作为查询字符串而不是会话属性传递。
<a href="/index.jsp?currentPage=firstPage">First Page</a>
<a href="/index.jsp?currentPage=secondPage">Second Page</a>
注意:始终尝试避免 Scriplet元素并使用JSP Standard Tag Library
答案 1 :(得分:1)
不,这种方法没有意义。您不能期望在浏览器中运行的JavaScript onclick处理程序在服务器上执行Java代码。 JavaScript处理程序在服务器上进行更改的唯一方法是向此服务器发送HTTP请求(使用AJAX)。
请记住,<% %>
内的所有内容都由JSP引擎在服务器上执行,以生成作为对浏览器的响应而发送的HTML文本。