Java 使用EL表达式,但页面可以';我不能正确地给出答案
这是Struts程序。我必须做一个登录页面。如果我在登录页面中输入名称Java 使用EL表达式,但页面可以';我不能正确地给出答案,java,jsp,struts2,el,Java,Jsp,Struts2,El,这是Struts程序。我必须做一个登录页面。如果我在登录页面中输入名称itcast和密码123,则页面将转到success.jsp(我在此页面中失败),否则它将显示错误.jsp loginaction.java: package cn.itcast.action; import com.opensymphopensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class Log
itcast
和密码123
,则页面将转到success.jsp
(我在此页面中失败),否则它将显示错误.jsp
loginaction.java
:
package cn.itcast.action;
import com.opensymphopensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//@Override
public String execute() throws Exception {
ActionContext context = ActionContext.getContext();
if ("itcast".equals(username) && "123".equals(password)) {
context.put("username", username);//${username}<br>
context.put("password", password); //${password}
context.put("success", "success");
return SUCCESS;
} else {
context.put("error", "error_zdh");
return ERROR;
}
}
}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login page</title>
</head>
<body>
<div align="center">login page
<form action="login" method="post">
username:<input type="text" name="username" /><br>
password:<input
type="password" name="password" /><br> <input type="submit"
value="login" />
</form>
</div>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>failed page</title>
</head>
<body>
<p>
${error }<br>
</p>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>success page</title>
</head>
<body>
<p>
${success }<br>
</p>
<h2>login information</h2>
username:${username }<br>
password:${password }<br>
</body>
</html>
login.jsp
:
package cn.itcast.action;
import com.opensymphopensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//@Override
public String execute() throws Exception {
ActionContext context = ActionContext.getContext();
if ("itcast".equals(username) && "123".equals(password)) {
context.put("username", username);//${username}<br>
context.put("password", password); //${password}
context.put("success", "success");
return SUCCESS;
} else {
context.put("error", "error_zdh");
return ERROR;
}
}
}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login page</title>
</head>
<body>
<div align="center">login page
<form action="login" method="post">
username:<input type="text" name="username" /><br>
password:<input
type="password" name="password" /><br> <input type="submit"
value="login" />
</form>
</div>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>failed page</title>
</head>
<body>
<p>
${error }<br>
</p>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>success page</title>
</head>
<body>
<p>
${success }<br>
</p>
<h2>login information</h2>
username:${username }<br>
password:${password }<br>
</body>
</html>
success.jsp
:
package cn.itcast.action;
import com.opensymphopensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//@Override
public String execute() throws Exception {
ActionContext context = ActionContext.getContext();
if ("itcast".equals(username) && "123".equals(password)) {
context.put("username", username);//${username}<br>
context.put("password", password); //${password}
context.put("success", "success");
return SUCCESS;
} else {
context.put("error", "error_zdh");
return ERROR;
}
}
}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login page</title>
</head>
<body>
<div align="center">login page
<form action="login" method="post">
username:<input type="text" name="username" /><br>
password:<input
type="password" name="password" /><br> <input type="submit"
value="login" />
</form>
</div>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>failed page</title>
</head>
<body>
<p>
${error }<br>
</p>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>success page</title>
</head>
<body>
<p>
${success }<br>
</p>
<h2>login information</h2>
username:${username }<br>
password:${password }<br>
</body>
</html>
成功页面
${success}
登录信息
用户名:${username}
密码:${password}
您误解了ActionContext
的概念。您应该区分操作上下文和ValueStack
。请参阅答案以澄清问题
每个地方都有其专用的存储空间,您可以在其中放置对象以供以后在某个调用上下文中运行/检索。运行框架的任何上下文都是关联的。上下文是在它内部的作用域对象之间进行通信的方式,您可以使用Java或其他表达式语言(EL)如OGNL进行访问
在OGNL中,操作上下文是OGNL上下文,值堆栈是根
框架将OGNL上下文设置为我们的ActionContext
,将值堆栈设置为OGNL根对象。(值堆栈是由多个对象组成的集合,但对OGNL而言,它似乎是单个对象。)与值堆栈一起,框架将其他对象放置在ActionContext
中,包括表示应用程序、会话和请求上下文的Map
s。这些对象与值堆栈(我们的OGNL根)一起共存于ActionContext
由于重定向到JSP页面,将调用新操作并创建新的ActionContext
对象。它不保留以前上下文中的值
您需要的是保存一些值,比如一个会话,您可以通过实现SessionAware
或直接使用API来正常注入该会话。请参阅答案以了解哪些上下文对象可用于Struts2应用程序
要使用Struts会话映射,您应该在操作中实现SessionAware
。因此,将向其注入会话,然后您可以使用会话映射来放置这些值,这些值可以通过OGNL访问
SessionAware
实现示例:
private Map<String, Object> session;
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
私有映射会话;
@凌驾
公共无效设置会话(映射会话){
this.session=会话;
}
看
您误解了
ActionContext
的概念。您应该区分操作上下文和ValueStack
。请参阅答案以澄清问题
每个地方都有其专用的存储空间,您可以在其中放置对象以供以后在某个调用上下文中运行/检索。运行框架的任何上下文都是关联的。上下文是在它内部的作用域对象之间进行通信的方式,您可以使用Java或其他表达式语言(EL)如OGNL进行访问
在OGNL中,操作上下文是OGNL上下文,值堆栈是根
框架将OGNL上下文设置为我们的ActionContext
,将值堆栈设置为OGNL根对象。(值堆栈是由多个对象组成的集合,但对OGNL而言,它似乎是单个对象。)与值堆栈一起,框架将其他对象放置在ActionContext
中,包括表示应用程序、会话和请求上下文的Map
s。这些对象与值堆栈(我们的OGNL根)一起共存于ActionContext
由于重定向到JSP页面,将调用新操作并创建新的ActionContext
对象。它不保留以前上下文中的值
您需要的是保存一些值,比如一个会话,您可以通过实现SessionAware
或直接使用API来正常注入该会话。请参阅答案以了解哪些上下文对象可用于Struts2应用程序
要使用Struts会话映射,您应该在操作中实现SessionAware
。因此,将向其注入会话,然后您可以使用会话映射来放置这些值,这些值可以通过OGNL访问
SessionAware
实现示例:
private Map<String, Object> session;
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
私有映射会话;
@凌驾
公共无效设置会话(映射会话){
this.session=会话;
}
看
为什么不调试
执行,看看发生了什么?你好!StackOverflow的效果最好,如果您解释您尝试了什么,以及代码如何没有按预期工作。谢谢你的代码,但还不清楚你真正的问题是什么。你能更具体地说明你希望代码如何工作吗?你正在重定向,这意味着有一个新的请求,这意味着有一个新的操作,这意味着你不再有用户名
或密码
。你为什么不调试执行
,看看发生了什么?你好!StackOverflow的效果最好,如果您解释您尝试了什么,以及代码如何没有按预期工作。谢谢你的代码,但还不清楚你真正的问题是什么。你能更具体地说明你希望代码如何工作吗?你正在重定向,这意味着有一个新的请求,这意味着有一个新的操作,这意味着你不再有用户名
或密码
。