转载请注明:http://blog.csdn.net/uniquewonderq
使用EL表达式,显示Action中的数据
问题:
在struts2框架下,如何将业务控制器Action的数据传递给JSP,并在JSP上显示出这些数据。
解决方案:
Struts2会自动的将Action的数据传递给JSP,并且对传递方式进行了封装,在使用时变得十分方便,甚至不需要使用request对象。它仅仅要求我们在Action中定义属性,并为属性提供get方法,那么从Action跳转到JSP时,struts2会自动的通过这些get方法将这些属性的值传递给JSP。最终在JSP上我们可以使用EL表达式来显示Action的属性值。
我们还是利用StrutsDay01项目的实例,目前HelloAction中已经有了两个属性,即realName、user,而该Action最终跳转的页面为hello.jsp,我们的目标是在hello.jsp上使用EL表达式输出这些属性值。
实现步骤:
步骤一:在Action中,给属性追加get方法
在HelloAction中,给realName属性追加get方法,用于页面的EL表达式访问并取值,user属性已经有了get方法,不需要再追加。代码如下:
代码语言:javascript复制package action;
import entity.User;
public class HelloAction {
public HelloAction(){
System.out.println("实例化 Action...");
}
//定义基本类型属性,接受表单参数:姓名
private String realName;
public void setRealName(String realName){
System.out.println("注入参数realName...");
this.realName=realName;
}
public String getRealName(){
return this.realName;
}
//定义实体对象属性,接受表单参数:用户名、密码
private User user;
public void setUser(User user){
this.user=user;
}
public User getUser(){
return this.user;
}
//在业务方法中输出"Hello,Action"
public String sayHello(){
System.out.println("Hello,Action");
//输出基本类型数据
System.out.println("姓名:" realName);
//输出域模型方法注入的参数
System.out.println("用户名:" user.getUserName());
System.out.println("密码:" user.getPassword());
return "success";
}
}
步骤二:在JSP上,使用EL表达式显示Action的属性值,代码如下:
代码语言:javascript复制<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h1>hello,Struts2!</h1>
<h1>姓名:${realName}</h1>
<h1>用户名:4{user.userName}</h1>
<h1>密码:${user.password}</h1>
</body>
</html>
步骤三:测试
重新部署项目并启动tomcat,在浏览器中输入地址:http://localhost:8888/StrutsDay01/
效果如下图所示:
在文本框中输入内容,点击提交,此时表单数据提交给了HelloAction,HelloAction接受到了表单数据后,跳转到了hello.jsp,我们在hello.jsp上使用EL表达式来输出HelloAction的属性值,效果如下图:
小结:
1.Action中追加属性时,不必区别何时加get方法,可是加set方法,通常每个属性都有get和set方法。
2.页面上写EL表达式,实际上与两种注入方式中,对应的表单文本框name表达式写法一致。