我正在尝试在列表项onclick调用中设置会话参数,例如:
<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>
但是,这导致secondPage一直显示,即使没有单击也是如此。这种方法甚至合法吗,还是有另一种方法来更改会话变量并刷新列表项中的页面?
调用JSP页面时,将按以下顺序进行以下操作:
因此,您的语句:session.setAttribute在将HTML发送给用户之前执行,并且确实执行并且currentPage始终设置为secondPage已经。
session.setAttribute
currentPage
secondPage
如何验证?
在下面添加以下行,div然后查看其打印内容。
div
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
在浏览器中右键单击,然后查看视图源。内部onclick属性没有任何内容,因为将setAttribute其制成了单独的命令并在将页面发送给您之前执行了该属性。
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标准标记库