Struts2 Action接受参数、简单数据验证
Struts2 Action接受参数STEP 1:
? ? index.jsp页面内容
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> struts2中的路径问题 struts2的路径1) 在struts2中的路径问题是根据action的路径而不是jsp路径确定,所以尽量不要使用相对路径。2) 可以使用redirect方式解决,但是refirect方式并非必要。3) 解决办法非常简单,统一使用绝对路径.(在jsp中使用request.getContextRoot()方式来获取webapp的路径) 和使用MyEclipse经常使用的,指定basePath路径。 <a href="/action/test01.action">路径问题->path路径下面</a> <br/> struts2中接受参数有三种方式; 1:属性接受参数 <a href="/param/param_action!query.action?user_name=zhudansheng&book_name=struts2学习实战&age=25&test_name=测试用户名">属性接受参数</a> 2:域模型(就是实体类)此方法最常用 <a href="/param/domain_action!modify.action?user_model.user_name=zhudanshengtest&user_model.book_name=struts2学习实战好呀&user_model.age=25&user_model.test_name1=测试用户名shima">域模型(就是实体类)接受参数</a> 3:驱动模型接口 <a href="/param/param_action!edit.action?user_name=zhudanshengtest&book_name=struts2学习实战好呀&age=25&test_name=测试用户名shima">域模型(就是实体类)接受参数</a> <br/> 默认ACTON的执行 <a href="/default_action/">默认ACTON的执行</a> </body></html>???
?STEP2:
?
?
struts.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><constant name="i18n" value="utf-8"></constant><!-- <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <global-results> <result name="error">/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="error"/> </global-exception-mappings> <action name="index"> <result type="redirectAction"> <param name="actionName">HelloWorld</param> <param name="namespace">/example</param> </result> </action> </package> <include file="example.xml"/> --> <!-- Add packages here --><!-- <package name="default" namespace="/" extends="struts-default"><action name="helloworld"><result>/helloworld.jsp</result></action></package>--><!-- 使用Action 的三种方式,在企业最常用的是继承ActionSupport类 --><package name="default" namespace="/action" extends="struts-default"><action name="test01" namespace="/param" extends="struts-default"><action name="param_action" namespace="/default_action" extends="struts-default"><default-action-ref name="index"></default-action-ref><default-class-ref name="code">package com.demo.action;import com.opensymphony.xwork2.ActionSupport;public class ParamActionDemo01 extends ActionSupport {private String user_name;private String book_name;private String age;private String test_name1;public String query() {System.out.println("用户名:"+this.user_name);System.out.println("书 名:"+this.book_name);System.out.println("年 龄:"+this.age);System.out.println("测试用户名:"+this.test_name1);return SUCCESS;}public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name = user_name;}public String getBook_name() {return book_name;}public void setBook_name(String book_name) {this.book_name = book_name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getTest_name() {return test_name1;}public void setTest_name(String test_name) {this.test_name1 = test_name;}}??
?
实验:Action的成员变量和方法中的变量是struts2给成员变量赋值还是给对应的方法中的变量赋值。
?
方法2:域模型(domain model) 常用
域模型其实就是实体类(实实在在的物体)
使用域模型可以创建一个实体类,通过实体类接受参数。
?
?
package com.demo.action;import com.demo.model.UserModel;import com.opensymphony.xwork2.ActionSupport;public class ParamDomainModelActionDemo01 extends ActionSupport{private UserModel user_model;public String modify() {//连接数据库,操作数据库数据//UserModel struts2中自动生成对象System.out.println("model 用户名:"+user_model.getUser_name());System.out.println("model 书 名:"+user_model.getBook_name());System.out.println("model 年 龄:"+user_model.getAge());System.out.println("model 测试用户名:"+user_model.getTest_name1());return SUCCESS;}public UserModel getUser_model() {return user_model;}public void setUser_model(UserModel user_model) {this.user_model = user_model;}}??
?
?
?
查资料:DTO
?
方法3:模型驱动接受参数(model driven)
非常重要哦程序设计思想,但是不常用
?
?
package com.demo.action;
?
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import ?com.demo.model.UserModel;
?
/**
?* 模型驱动接口传递参数需要声明和实例化实体类 需要通过使用getModel()方法获取参数。
?*?
?* 模型驱动是一种设计编程思路的思想
?*?
?* 设计思想是MVC
?* @author Administrator
?*
?*/
public class ModelDrivenAction extends ActionSupport implements ModelDriven<UserModel>{
private UserModel userModel =new UserModel();
public String edit() {
return SUCCESS;
}
public UserModel getModel(){
return userModel;
}
}
?
?
?
Struts中的模型驱动是有一个getModel() 获取接受参数。
?
STRUTS2 MVC
?
?
接受参数的中文乱码问题?????
?
?
方法:读程序可以使用一条线,或者使用DEBUG,根据业务流程读源程序
努力:
总结:
??
?
?
Action 简单数据验证使用addFieldError和<s:fielderror />标签处理数据校验的正确性
value stack