Struts2学习笔记之参数的传递与获取(四)
基于上一篇博客做了一下的修改。
Struts2中传递参数和方法
基本属性:
package com.mscncn.struts.ch01.web;
import com.mscncn.struts.ch01.entity.User;
public class HelloWorldAction {
private String realName;
private User user;
public String execute(){
System.out.println("realName:"+realName+","+user);
return "ok";
}
public String getRealName() {
System.out.println("获取realName");
return realName;
}
public void setRealName(String realName) {
System.out.println("注入realName");
this.realName = realName;
}
public User getUser() {
System.out.println("获取User");
return user;
}
public void setUser(User user) {
System.out.println("注入User");
this.user = user;
}
}
上面代码中得realName 是HelloWorldAction中的一个普通属性,传入参数,就需要我们为realName提供一个setter方法:
public void setUser(User user) {
System.out.println("注入User");
this.user = user;
}
那么realName 可以直接接收页面表单元素name=realName 的value值。
域类型:
上面代码的user就是一个域模型,那么 我们想要给与模型传入值,也需要对应的setter方法
注意: 传入值需要setter方法,获取值需要getter方法
package com.mscncn.struts.ch01.entity;
public class User {
private String userName;
private String password;
public String getUserName() {
System.out.println("获取user.userName");
return userName;
}
public void setUserName(String userName) {
System.out.println("设置user.userName");
this.userName = userName;
}
public String getPassword() {
System.out.println("获取user.password");
return password;
}
public void setPassword(String password) {
System.out.println("设置user.password");
this.password = password;
}
@Override
public String toString() {
return "User [userName=" + userName + ", password=" + password + "]";
}
}
如果传递给user模型,那么我们需要在form中的表单元素name=user.属性名 给user模型对应的属性设置值(在action中给user模型提供getter,setter方法)
测试:
1. 发送请求: http://localhost:8080/struts-ch01/
2. 进入index.jsp
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %> <!DOCTYPE> <html> <body> <form action="${pageContext.request.contextPath }/hello/sayHello" method="post"> 真实姓名:<input name="realName" /></br> 账号:<input name="user.userName" /></br> 密码<input type="password" name="user.password" /></br> <input type="submit"/> </form> </body> </html>
3. 填写表达,提交表单
4. 提交给action
package com.mscncn.struts.ch01.web;
import com.mscncn.struts.ch01.entity.User;
public class HelloWorldAction {
private String realName;
private User user;
public String execute(){
System.out.println("realName:"+realName+","+user);
return "ok";
}
public String getRealName() {
System.out.println("获取realName");
return realName;
}
public void setRealName(String realName) {
System.out.println("注入realName");
this.realName = realName;
}
public User getUser() {
System.out.println("获取User");
return user;
}
public void setUser(User user) {
System.out.println("注入User");
this.user = user;
}
}
struts.xml配置:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <!-- 配置需要体现2点内容 1. 请求对应哪个Action类及其方法 2. 请求转发到哪个页面 --> <package name="ch01" namespace="/hello" extends="struts-default"> <!-- 请求的url与 两个配置参数相关 1. package 的namespace的参数 2. action 的name 以此为例 http://localhost:8080/struts-ch01/hello/sayHello package的namespace 是项目后面的路径 --> <action name="sayHello" class="com.mscncn.struts.ch01.web.HelloWorldAction" method="execute"> <result name="ok"> /hello.jsp </result> </action> </package> </struts>
5. 处理结束后,转发给result对应的视图hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>Hello Struts2</h1> 真实姓名:${realName }<br/> 账号:${user.userName }<br/> 密码:${user.password }<br/> </body> </html>
注意,在Action中得属性我们可以直接在页面是使用,如果属性是基本类型可以直接使用el表达式 ${realName}来获取Action中realName的值,如果想要获取user中的属性
可以使用${user.属性名}来获取user模型对象对应的属性值。