ActionServlet填充form的过程

来源:互联网 发布:淘宝童鞋运动少女 编辑:程序博客网 时间:2024/05/17 05:18
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foudation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"><struts-config><form-beans><form-bean type="demo.AddStudentForm" name="addStudentForm"> </form-bean></form-beans><action-mappings><action path="/addStudent" type="demo.AddStudentAction" name="addStudentForm"><forward name="addStudentSuccess" path="/addStudentSuccess.jsp"></forward><forward name="addStudentFailure" path="/addStudentFailure.jsp"></forward></action></action-mappings></struts-config>


1.检查<action-mappings>,查看action中的name属性。

2.根据name查看<form-bean>中的配置信息。

3.如果找到,重用

4.未找到,构建一个form-bean实例,且保存在一定的作用范围(request,session)

5.调用reset()

6.从客户提交的参数中取值,调用set方法取值

7.查看action中的validate属性(默认为true)是否为ture,若是,进行校验,校验不通过,跳转到错误页面,错误页面由action中的input属性指定。

8.若校验成功,派发请求到Action中

package demo;import java.io.IOException;import java.io.PrintWriter;import java.util.Properties;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Properties prop=new Properties();prop.load(this.getClass().getClassLoader().getResourceAsStream("form.properties"));String formClassFormname=prop.getProperty("formClassFormname");String formName=prop.getProperty("formName");FormUtil.fillForm(request, formClassFormname, formName);request.getRequestDispatcher("/addStudentSuccess.jsp").forward(request, response);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubdoPost(req, resp);}}
package demo;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.util.Enumeration;import javax.servlet.http.HttpServletRequest;import com.sun.org.apache.commons.beanutils.BeanUtils;public class FormUtil {public static void fillForm(HttpServletRequest request,String formClassFormname,String formName) {//1.实例化ActionForm的子类//2.提取表单参数//3.将表单参数和bean中的参数进行匹配//4.将form保存在session中try {ActionForm actionForm=(ActionForm)Class.forName(formClassFormname).newInstance();Enumeration params=request.getParameterNames();Field [] fields=actionForm.getClass().getDeclaredFields();while(params.hasMoreElements()){String paraname=(String) params.nextElement();for(Field field:fields){String fieldName=field.getName();if(fieldName.endsWith(paraname)){String value=request.getParameter(fieldName);try {BeanUtils.setProperty(actionForm, fieldName, value);} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}request.getSession().setAttribute(formName, actionForm);System.out.println(actionForm.toString());} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package demo;public class AddStudentForm extends ActionForm {private String sname;private String major;private float score;private java.sql.Date birth;public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public float getScore() {return score;}public void setScore(float score) {this.score = score;}public java.sql.Date getBirth() {return birth;}public void setBirth(java.sql.Date birth) {this.birth = birth;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "name="+sname+" major="+major+" score="+score+" birth"+birth.toString();}}




0 0
原创粉丝点击