ListItems中的JSP onclick

时间:2014-06-21 16:13:50

标签: html jsp

我正在尝试在列表项中设置会话参数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>

然而,即使没有点击,这也会导致第二页一直显示。这种方法是否合法,还是有另一种方法来更改会话变量并刷新列表项中的页面?

2 个答案:

答案 0 :(得分:2)

调用JSP页面时,会按以下顺序发生以下情况:

  • 服务器检查.jsp是否已经编译,以及自上次编译以来它是否已更改。
  • Server通过Jasper编译器运行jsp,它将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"%>
    <c:out value="${sessionScope.currentPage }" />
    
  2. 右键单击浏览器并查看视图源。 onclick属性中没有任何内容,因为setAttribute被创建为单独的命令,并在页面发送给您之前执行。

    <li class="menuClass" onclick="">
    

  3. 您可以尝试如下所示将其作为查询字符串而不是会话属性传递。

    <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文本。