一、本节知识点
二、新建web.xml和以前一样
三、新建com.eatok.form.UserBea.java
package com.etoak.form;
public class UserBean {
//封装表单项
private String myname;
//封装一个非表单项,此表单项不是用户提交的而是开发者自己设计的
private String tip;
public String getMyname() {
return myname;
}
public void setMyname(String myname) {
this.myname = myname;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
}
四、新建com.etoak.acion.LoginAction.java
package com.etoak.action;
import com.etoak.form.UserBean;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/*
* 实现ModelDriven接口
* 表示可以使用一个专门的类来封装表单项甚至非表单项
* */
public class LoginAction extends ActionSupport
implements ModelDriven<UserBean>{
//此对象名对应页面
/*
* <s:textfield label="姓名"
* name="对应这里.myname">
*
* */
UserBean model = new UserBean();
@Override
public UserBean getModel() {
// TODO Auto-generated method stub
return model;
}
@Override
public String execute() throws Exception {
if(this.getModel().getMyname()
.trim().equals("penny")){
this.getModel().setTip("欢迎您回来");
return this.SUCCESS;
}else{
this.getModel().setTip("抱歉数据库中查无此人");
return this.ERROR;
}
}
@Override
public void validate() {
if(this.getModel().getMyname().trim().length()<4){
this.addFieldError("model.myname","用户名不能小于4位");
}
}
}
五、新建struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="suibian" extends="struts-default">
<action name="login" class="com.etoak.action.LoginAction">
<result>/suc.jsp</result>
<result name="error">/err.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
六、新建jsp页面
1,新建index.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>模型驱动</title>
<%--
模型驱动就是在struts2中继续使用类似struts1中
静态ActionForm封装表单项的方式进行开发的一种
方式,专门设置一个类来封装表单项,这种开发方式
对于大型表单项来说非常方便,此功能由ModelDriven
拦截器提供
--%>
</head>
<body>
<s:form action="login">
<s:textfield label="姓名" name="model.myname"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
</body>
</html>
2,新建suc.jsp成功页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<%--
拿取表单项和非表单项
当我们使用struts2模型驱动时,
不管是表单项还是非表单项,则全部被框架
封装进HttpServletRequest范围和
struts2独有的范围值栈中
--%>
<s:property value="#request.model.myname" />
<%--
值栈取值不需要书写任何#范围.****
--%>
<s:property value="model.myname" />
<hr>
<br>
<%-- 拿取非表单项 --%>
<s:property value="#request.model.tip" />
<s:property value="model.tip" />
<hr>
<%--
简略写法
拿取值栈
--%>
<s:property value="myname" />
<s:property value="tip" />
</body>
</html>
3,新建err.jsp失败页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<%--
拿取表单项和非表单项
当我们使用struts2模型驱动时,
不管是表单项还是非表单项,则全部被框架
封装进HttpServletRequest范围和
struts2独有的范围值栈中
--%>
<s:property value="#request.model.myname" />
<%--
值栈取值不需要书写任何#范围.****
--%>
<s:property value="model.myname" />
<hr>
<br>
<%-- 拿取非表单项 --%>
<s:property value="#request.model.tip" />
<s:property value="model.tip" />
<hr>
<%--
简略写法
拿取值栈
--%>
<s:property value="myname" />
<s:property value="tip" />
</body>
</html>