【发布时间】:2013-07-13 20:14:07
【问题描述】:
<html>
<script type="text/javascript">
function logged()
{
<% session.setAttribute("logtype", "hire"); %>
var x=<%=session.getAttribute("loggedin")%>;
if(x===true)
{
window.location="home.jsp";
return false;
}
else if(x===false)
{
return true;
}
}
</script>
<body>
<form method="post" action="login.jsp" onsubmit="return logged()">
<input type="submit" value="HIRE"/>
</form>
<form method="post" action="displayTasks.jsp" onsubmit="<% session.setAttribute("logtype", "work"); %>">
<input type="submit" value="WORK"/>
</form>
</body>
</html>
我的会话变量“logtype”产生了问题。无论我点击什么,它都保持为“工作”。我做错了什么?
【问题讨论】:
-
您正试图在 JS 事件上运行 Java。 Java == 服务器。 JS == 客户端。您在服务器上设置会话属性。您认为您是在 JS 事件之后设置它,在 Java 执行并发送到客户端很久之后。
-
那么我应该在哪里设置会话值?
-
不是“哪里”,“何时”。您需要退后一步,首先了解 Java Web 应用程序的工作原理。 “何时”取决于您实际尝试做什么;您可以根据您的要求使用 Ajax、普通表单提交等。
-
不熟悉 ajax 人。刚开始用jsp的
-
更有理由退后一步。 Scriptlet 是 Java,编译成 JSP 的 servlet,并在服务器端执行。 在 servlet 被渲染之后,它被发送到客户端。 JavaScript 在 client(例如,浏览器)上执行。就本次讨论而言,浏览器 (a) 对 Java一无所知,并且 (b) 只有在 Java 端需要修改某些内容时才能向服务器发出 HTTP 请求。跨度>