一尘不染

ListItems onclick内的JSP

jsp

我正在尝试在列表项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一直显示,即使没有单击也是如此。这种方法甚至合法吗,还是有另一种方法来更改会话变量并刷新列表项中的页面?


阅读 258

收藏
2020-06-08

共1个答案

一尘不染

调用JSP页面时,将按以下顺序进行以下操作:

  • 服务器检查.jsp是否已被编译以及自上次编译以来是否已更改。
  • Server通过Jasper编译器运行jsp,Jasper编译器将jsp解释为Java代码,任何非Java的内容(CSS,HTML,JavaScript等)都放置在String中。
  • Java代码已编译并执行。
  • 结果放入响应中并发送给用户。

因此,您的语句:session.setAttribute在将HTML发送给用户之前执行,并且确实执行并且currentPage始终设置为secondPage已经。


如何验证?

  1. 在下面添加以下行,div然后查看其打印内容。

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    

  2. 在浏览器中右键单击,然后查看视图源。内部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标准标记库

2020-06-08