ITEEDU

2.4 处理表单的动作FormAction

其实,在config-struts配置文件的过程中,大家应该发现这样的问题:
首先、配置文件中只是动态的创建了表单,那么用户提交的表单又怎么知道自动的填充配置文件中创建的表单呢?
其次、在配置文件中的映射部分,那些有关用户提交完表单所要到达的目标页面是如何处理的?
下边我们通过struts中另一个必不可少的部分formAction动作处理来进行讲解:
formAction动作其实和servlet的大同小异,只要掌握的Struts思想会JSP和Servlet,相信应该不会有问题。
当然说再多也无用,只要读者感兴趣去实践,相信实践出真知会在您那里得到验证!
下边就是笔者在用struts框架做学生选课系统的loginForm的一个处理动作代码loginAction.java

package action;
import org.apache.struts.action.*;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.DynaActionForm;
import db.dbConn;
import java.sql.ResultSet;
import javax.servlet.http.*;
public class loginAction extends Action {
	public  ActionForward execute(ActionMapping mapping, ActionForm form,
	HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		DynaActionForm loginForm = (DynaActionForm) form;
		dbConn javaBean = new dbConn();
		HttpSession session = request.getSession();
		String prompt = null;
		String sno = loginForm.getString("Sno");
		String key = loginForm.getString("Key");
		String kind = loginForm.getString("Kind");
		if  (session.getAttribute("sno") == null) {
			session.setAttribute("Sno", sno);
			session.setAttribute("Key", key);
		}//更新session的内容;
		if  (sno != null && key != null) {
			//管理员登陆页面控制处理
			if (kind.equals("admin")) {
				String SQL = "SELECT* From admins where id='" + sno +  "'";
				ResultSet rs1 = (ResultSet) javaBean.executeQuery(SQL);
				if (rs1.next() && key.equals(rs1.getString("key"))) {
					prompt =  "ad_success";
				} else {
					request.setAttribute("msg", "管理员同志您的身份验证不正确!");
					prompt =  "failureLogin";
				}
			} //学生登陆页面控制处理
			else {
				String SQL = "SELECT * From stuinfo where Sno='" + sno +  "'" + "and keys='" + key + "'";
				ResultSet rs2 = (ResultSet) javaBean.executeQuery(SQL);
				if (!rs2.next()) {
					request.setAttribute("ms", "您登陆的帐号和密码不一致!");
					return  (mapping.findForward("failureLogin"));
				} else {
					session.setAttribute("Sno", rs2.getString("Sno"));
					session.setAttribute("Sname",  rs2.getString("Sname"));
					prompt =  "stu_success";
				}
			}
		}
		return (mapping.findForward(prompt));//需要有返回值;
	}
}

  

DynaActionForm loginForm = (DynaActionForm) form;

//动态创建实例表单;

String sno =  loginForm.getString("Sno");
String key = loginForm.getString("Key");
String kind = loginForm.getString("Kind");

提取用户输入的信息,并加入到动态创建的表单中。

return  (mapping.findForward("failureLogin"));

根据配置文件config-struts映射文件中跳转指令forward中的name字段的值来进行相应的跳转。
如果对servlet很熟悉的话,那么实现formAction这部分并不难。只要明白上边三个关键部分,其他的处理几乎和JSP+Servlet项目中的代码重复。

2.5 小结

本篇讲述了在web开发过程中Struts的主要组成部分,以及个部分是如何实现的。如果搞懂了form表单、formAction、config-struts之间的工作过程:
Config-struts中有form表单的字段属性,跳转路径。其中form表单,是在用户提交了信息之后,被实例化,并通过formAction动作处理,对应config-struts中forword中的name字段的值,来决定跳转到那个页面。
对JSP和servlet很熟悉,做出struts框架web开发是不是难事!