Struts-setter、getter方法自动 ActionSupport类-属性驱动+模型驱动

来源:互联网 发布:数据库第六版中文答案7 编辑:程序博客网 时间:2024/06/07 18:22
【setter、getter方法自动设置获取】
属于拦截器的功能


在TestAction类里设置两个属性


bookId
bookName

并且声称setter、getter方法

public class TestAction implements Action {private int bookId;private String bookName;public int getBookId() {return bookId;}public void setBookId(int bookId) {this.bookId = bookId;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("execute()是默认执行的方法");return SUCCESS;}}
然后在地址栏传入参数

在jsp页面用EL表达式输出
<body>测试页面<br>${bookId }${bookName }</body>


【ActionSupport类】
Action比较局限
实际一般都用ActionSupport类(更强大),它本身实现了Action接口。
继承extends ActionSupport

package com.zhiqi.test;import com.opensymphony.xwork2.ActionSupport;public class TestActionSupport extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;private int bookId;private String bookName;public int getBookId() {return bookId;}public void setBookId(int bookId) {this.bookId = bookId;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("ActionSupport的execute()是默认执行的方法");return SUCCESS;}}

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="testAction" extends="struts-default"><action name="showMethod" class="com.zhiqi.test.TestActionSupport"><result name="success">test.jsp</result></action></package></struts>


【设置属性】属性驱动(基本类型+JavaBean类型)+模型驱动
实现基本的登录验证

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body>登录验证测试<form action="login" method="post">用户名:<input type="text" name="userName" id="userName">密 码:<input type="password" name="password" id="password"><input type="submit" value="登录"></form></body></html>
通过配置xml交给对应的类处理

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="testAction" extends="struts-default"><action name="login" class="com.zhiqi.test.UserAction"><result name="success">success.jsp</result><result name="error">error.jsp</result></action></package></struts>


此处重点是,不再用getParameter()获取参数,可以自动。
package com.zhiqi.test;import com.opensymphony.xwork2.ActionSupport;import com.zhiqi.model.User;import com.zhiqi.service.UserService;public class UserAction extends ActionSupport {private static final long serialVersionUID = 1L;private String userName;private String password;private UserService userService=new UserService();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;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("UserAction的默认方法");User user=new User();//替代了传统的getParameter()user.setUserName(userName);user.setPassword(password);if(userService.login(user)){return SUCCESS;}else{return ERROR;}}}

service层(.net人员称之为商业逻辑层,实际开发还需加商业规则层用于验证)
package com.zhiqi.service;import com.zhiqi.model.User;public class UserService {public boolean login(User user){if("web".equals(user.getUserName()) && "124".equals(user.getPassword())){return true;}else{return false;}}}

model层

package com.zhiqi.model;public class User {private String userName;private String password;public User() {super();// TODO Auto-generated constructor stub}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;}}

【JavaBean类型】实际开发时model层有可能有几十个字段,那可以依次写出,更好的是采用JavaBean


jsp页面需要改动

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body>登录验证测试<form action="login" method="post">用户名:<input type="text" name="user.userName" id="userName">密 码:<input type="password" name="user.password" id="password"><input type="submit" value="登录"></form></body></html>

通过xml交给对应的类

package com.zhiqi.test;import com.opensymphony.xwork2.ActionSupport;import com.zhiqi.model.User;import com.zhiqi.service.UserService;public class UserAction extends ActionSupport {private static final long serialVersionUID = 1L;private User user;private UserService userService=new UserService();public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("UserAction的默认方法");if(userService.login(user)){//直接判断return SUCCESS;}else{return ERROR;}}}
JavaBean的处理更加的简洁方便


【模型驱动】implements ModelDriven<User>
有缺陷、只能接受一个JavaBean
了解

jsp页面提交

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body>登录验证测试<form action="login" method="post">用户名:<input type="text" name="userName" id="userName">密 码:<input type="password" name="password" id="password"><input type="submit" value="登录"></form></body></html>
UserAction处理

package com.zhiqi.test;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.zhiqi.model.User;import com.zhiqi.service.UserService;public class UserAction extends ActionSupport implements ModelDriven<User> {private static final long serialVersionUID = 1L;private User user=new User();//需要newprivate UserService userService=new UserService();//public User getUser() {//return user;//}//public void setUser(User user) {//this.user = user;//}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("UserAction的默认方法");if(userService.login(user)){//直接判断return SUCCESS;}else{return ERROR;}}@Overridepublic User getModel() {//自动设置一个JavaBean// TODO Auto-generated method stubreturn user;}}

●checkbox传入多个值,而且不固定

如jsp页面

<form action="hobby" method="post">爱好:<input type="checkbox" name="hobby" value="游泳">游泳<input type="checkbox" name="hobby" value="登山">登山<input type="checkbox" name="hobby" value="滑行">滑行<input type="checkbox" name="hobby" value="读书">读书<input type="checkbox" name="hobby" value="音乐">音乐<input type="submit" value="确定"></form>
通过struts.xml配置
<action name="hobby" class="com.zhiqi.test.HobbyAction"><result name="success">success.jsp</result></action>
传入HobbyAction时用String[],即String数组来处理

package com.zhiqi.test;import com.opensymphony.xwork2.ActionSupport;public class HobbyAction extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;private String [] hobby;public String[] getHobby() {return hobby;}public void setHobby(String[] hobby) {this.hobby = hobby;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubfor(String h:hobby){System.out.println(h);}return SUCCESS;}}

从页面传入多个对象的属性
如Book书的 名称、作者、价格

<body><h3>输入图书信息,要求可以输入多个,不要一本一本的添加</h3><form action="addBooks" method="post"><table><tr><td>图书名称</td><td>图书作者</td><td>图书价格</td></tr><tr><td><input type="text" name="books[0].bookName" /></td><td><input type="text" name="books[0].bookAuthor" /></td><td><input type="text" name="books[0].bookPrice" /></td></tr><tr><td><input type="text" name="books[1].bookName" /></td><td><input type="text" name="books[1].bookAuthor" /></td><td><input type="text" name="books[1].bookPrice" /></td></tr><tr><td><input type="submit" value="提交" /></td><td></td><td></td></tr></table></form></body>

<action name="addBooks" class="com.zhiqi.test.AddBooksAction"><result name="success">success.jsp</result></action>
此时Struts提供了集合,如用ArrayList<Book>来接收

package com.zhiqi.test;import java.util.ArrayList;import com.opensymphony.xwork2.ActionSupport;import com.zhiqi.model.Book;public class AddBooksAction extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;private ArrayList<Book> books;public ArrayList<Book> getBooks() {return books;}public void setBooks(ArrayList<Book> books) {this.books = books;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubfor(Book b:books){System.out.println(b);}return SUCCESS;}}





0 0