Struts模型组件与视图组件

模型组件
模型组件代表应用的业务数据和逻辑。Struts框架并没有为设计和创建模型组件提供现成的框架。不过Strtus允许使用其他的模型组件来处理应用的业务领域。
1.JavaBean
2.Hibernate
3.Spring
4.EJB
5.WebServices

视图组件
Struts框架的视图负责向客户显示动态的网页内容。Struts框架的视图主要包括以下几种:
1.JSP
2.ActionForm
3.DynaActionForm
4.Struts标签库

ActionForm

ActionForm是Struts框架提供的DTO,用于在视图层和控制层之间传递HTML表单数据。控制层可以从ActionForm中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm中,然后把它返回给视图。ActionForm还具有表单验证功能,可以为模型层过滤不合法的数据。
1.定义ActionForm类
2.定义ActionForm的属性
3.重写reset()方法
4.实现validate()方法
5.配置ActionForm
6.与ActionForm对应的视图

定义ActionForm类
Struts框架中定义的ActionForm类是抽象的,必须在应用中创建它的子类。

定义ActionForm的属性
想捕获具体的HTML表单数据,ActionForm中的属性必须和HTML表单中的字段一一对应。

重写reset()方法
不管ActionForm存在于哪个范围内,对于每一个请求,控制器都会先调用ActionForm的reset()方法,然后再把用户输入的表单数据组装到ActionForm中。reset()方法用于恢复ActionForm的属性的默认值。

实现validate()方法
validate()方法的作用主要是对用户提交的表单数据进行初步验证,譬如用户提交的数据是否为空,是否数据长度不够等等。当然,这些验证,我们完全可以在表单页面使用javascript脚本语言来实现。

举例:
package form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
//ActionForm类
public class LoginForm extends ActionForm {
//定义属性
private String password;
private String userName;
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}
//重写reset方法
public void reset(ActionMapping mapping, HttpServletRequest request) {
    this.userName="";
    this.password="";
}
//重写validate方法
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
    ActionErrors errors=new ActionErrors();
    if(this.userName.equals("")){
        errors.add("userName",new ActionMessage("un"));
    }
    if(this.password.equals("")){
        errors.add("password",new ActionMessage("pwd"));
    }
    return errors;
}
}

配置ActionForm
ActionForm类需要在struts-config.xml中配置后才可以使用。
<struts-config>
  <form-beans>
    <form-bean name="loginForm" type="form.LoginForm" />
  </form-beans>
  <action-mappings>
    <action attribute="loginForm" input="/login.jsp"
      name="loginForm" path="/login" scope="request"
      type="action.LoginAction">
        <forward name="no" path="/no.jsp" />
        <forward name="yes" path="/yes.jsp" />
    </action>
  </action-mappings>
  <message-resources parameter="ApplicationResources" />
</struts-config>

与ActionForm对应的视图
将HTML表单中的数据传递给ActionForm,也需要符合特定的规范。
举例:
<%@ page contentType="text/html;charset=gbk"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
  <head><title>JSP for LoginForm form</title></head>
  <body>
    <html:form action="/login">
      userName : <html:text property="userName"/>
      <html:errors property="userName"/><br/>
      password : <html:password property="password"/>
      <html:errors property="password"/><br/>
      <html:submit/><html:reset/>
    </html:form>
  </body>
</html>

DynaActionForm
ActionForm可以简化Web应用的开发,但唯一的缺点是对于大型的Struts应用必须以编程的方式创建大量的ActionForm,如果HTML表单的字段发生变化,就必须修改并重编译相关的ActionForm。
Struts1.1对此做出了改进,引入了动态ActionForm的概念。Struts框架的DynaActionForm类实现了动态ActionForm,DynaActionForm类是ActionForm类的子类。
DynaActionForm的目的就是减少ActionForm的数目,利用它你不必创建一个个具体的ActionForm类,而是在配置文件中配置出所需的虚拟ActionForm。
举例:
struts-config.xml中
<form-beans>
  <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">    
    <form-property name="password" type="java.lang.String" />
    <form-property name="userName" type="java.lang.String" />
  </form-bean>
 </form-beans>

ActionForm类execute()方法中
DynaActionForm loginForm = (DynaActionForm) form;
String userName=(String)loginForm.get("userName");
String password=(String)loginForm.get("password");

JSP页面
<html:form action="/login">
  userName : <html:text property="userName"/><br/>
  password : <html:password property="password"/><br/>
  <html:submit/><html:reset/>
</html:form>

你可能感兴趣的:(html,框架,jsp,struts,领域模型)