Model—form bean
struts是基于Model 2的一种jsp开发架构,struts当然应该有自己的模型(model)。
什么是模型(model),在mvc模式中,模型用来描述应用程序中的数据。
Struts中的模型(model)是form bean。
我们来看一个form bean实例:
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
public class BookForm extends ActionForm
{
private Book book=new Book();
String title="Ye old Book";
public void setTitle(String title)
{
book.setTitle(title);
}
public String getTitle()
{
return book.getTitle();
}
public void setBook(Book book)
{
this.book=book;
}
public Book getBook()
{
return this.book;
}
public void reset(ActionMapping mapping,HttpServletRequest request)
{
this.book=new Book();
}
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
{
ActionErrors errors=new ActionErrors();
if((book.getTitle()==null)||(book.getTitle().length()<3))
{
errors.add("Title",new ActionError("error.book.title"));
}
return errors;
}
}
我们看到,form bean继承于ActionForm,form bean里面的属性就是应用程序要用的数据,每个属性都有getter和setter方法。Reset方法是当该form bean对应的页面点击reset按钮后执行的动作。而validate方法是对该form bean对应的页面进行输入校验。
Form bean的原则是简单,只表达jsp要用到的数据即可,不赞成在form bean里有逻辑操作,逻辑操作应在action bean里完成。
另外,通过session.setAttribute(“beanName”,bean),request.setAttribute(“beanName”,bean)设置的bean和form bean一样使用,即可以在网页上通过struts标记如<bean:write name=”beanName” property=”beanProperty”/>或<html:text name=”beanName” property=”beanProperty”/>取得bean 的属性,如下例:
List l=new ArrayList();
for(int i=0;i<samyList.size();i++)
{
RadioBean rb=new RadioBean();
rb.setLabel(((SmsAccountMemory)samyList.get(i)).getSmsaccountname());
rb.setValue(((SmsAccountMemory)samyList.get(i)).getSmsaccountname());
l.add(rb);
}
request.setAttribute("accounts",l);
在action bean里做了上述设置后,我们在名称为accounts的bean里存入了一个List,List里面的元素是RadioBean,RadioBean有两个属性:label和value。
我们看看在页面上我们怎么使用这个bean:
<logic:iterate id="account" name="accounts" type="com.tongyou.smsweb.common.RadioBean">
<tr>
<td>
<html:radio property="smsaccountname" value="value" idName="account"/>
<td><bean:write name="account" property="label"/></td>
</tr>
</logic:iterate>
在<logic:iterate>标记里,我们应用了该bean,name=”accounts”。
每次循环得到的RadioBean,我们放在id=”account”的bean里面。
Controller—action bean
Struts中的Action类的工作机制 任何的Action类都是org.apache.struts.action.Action的子类。Action子类应该覆写父类的execute()方法。当ActionForm Bean被创建,并且表单验证顺利通过后,Struts框架就会调用Action类的execute()方法。execute()方法的定义如下: public ActionForward execute(ActionMapping mapping ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException; execute()方法包含一下参数: · ActionMapping:包含了这个Action的配置信息,和struts-config.xml文档中的 <action>元素对应。 · ActionForm:包含了用户的表单数据,当Struts框架调用execute()方法时, ActionForm中的数据已通过了表单验证。 · HttpServletRequest:当前的HTTP请求对象。 · HttpServletResponse:当前的HTTP响应对象。 Action类的execute()方法返回ActionForward对象,他包含了请求转发路径信息。
其实,struts的控制器是由系统servlet和action bean共同完成的,由于系统级的控制不用我们操心,这里我们只讲讲我们在action bean里所做的工作。
我们应该在action bean里所用的工作有:
。往form bean里赋入初始值
。取得form bean的数据
。行进必要的商业逻辑或显示逻辑
。网页转向
例:
package com.tongyou.smsweb.admin;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.sql.Connection;
import java.util.List;
import com.tongyou.smsweb.common.PageControlFormup;
public class ListTaskAction extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
{
try
{
HttpSession session=request.getSession();
UserForm userlogon=(UserForm) session.getAttribute("user");
if(userlogon==null) return (mapping.findForward("logon"));
Connection myconnection=getDataSource(request).getConnection();
TaskManager tm=TaskManager.getInstance(myconnection);
PageControlFormup pcform=(PageControlFormup)form;
uest.getAttribute(mapping.getAttribute());
if(pcform==null) pcform=new PageControlFormup();
List list=tm.getAllTask();
pcform.dowrapped(list);
request.setAttribute(mapping.getAttribute(),pcform);
return (mapping.findForward("ListTask"));
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
}
通过上例我们看到, action bean继承于Action,里面有一个常用的方法:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
他的有mapping,用于转向。
Form,用于取得该action bean对应的form bean,至于这个form bean的类型,看action bean的设置:
<action path="/ListTask"
type="com.tongyou.smsweb.admin.ListTaskAction"
name="PageControlForm"
scope="request" >
我们看到配置里的name=”PageControlForm”就是该action对应的form bean的名称,我们在配置里找到PageControlForm:
<form-bean name="PageControlForm" type="com.tongyou.smsweb.common.PageControlFormup"/>
我们看到该form bean的类型是PageControlFormup,所以在程序中我们有:
PageControlFormup pcform=(PageControlFormup)form;
这样,我们就取得了该form bean。
return (mapping.findForward("ListTask"));
是action bean执行完后,转向的网页,ListTask是转向名,我们在配置里可以找到:
<forward name="ListTask"
path="/WEB-INF/jsp/admin/ListTask.jsp"
contextRelative="true"/>
即转向/WEB-INF/jsp/admin/ListTask.jsp所指的页面。
在上例中,我们从数据库里取得一些数据,赋给action bean对应的form bean,最后转到对应得页面进行显示。
view--jsp
1
<bean:write>是用显示只读变量,有两个参数:name和property。Name里填form bean的名称,property里填form bean里你想要显示的属性。如form bean,user.java里有我想要显示的username属性,则我们这样表示:<bean:write name=”user” property=”username”/>。
注意:<bean:write>是只读的,这意味着我们要不能在action bean里取得property代表属性的值。如果我们想取该属性的值,可用<html:text>,但<html:text>对用户来说是可读写的。如果我们只想用户对一个属性只读,而我们又想在action bean里取得该属性的值,我们可以在网页里加入一个<bean:write>用于给用户显示该属性,再加入一个<html:hidden>用于我们在action bean里取得该属性的值,同样,我们也可以在javascript里操作该属性,<bean:write>标记的属性我们也不能在javascript里操作。
2
定义网页的form,action里是当网页提交后执行的action bean。如:<html:form action=”/relay”>……</html:form>。
注意:在javascript中,我们要用到form的名称,那么对于<html:form action=”/AddTask”>,form的名称是什么呢?这要从action里看:
<action path="/AddTask"
type="com.tongyou.smsweb.admin.AddTaskAction"
name="TasksForm"
scope="request"
input="/WEB-INF/jsp/admin/SpecifyUser.jsp">
</action>
我们看到:action “/AddTask”对应的form bean的名称是TasksForm,而该action的转向为:<forward name="AddTask"
path="/WEB-INF/jsp/admin/AddTask.jsp"
contextRelative="true"/>
则网页“/WEB-INF/jsp/admin/AddTask.jsp”的form的名为:TasksForm。
3
逻辑算子最常用的功能是用来处理表格:
<table>
<logic:iterate id=”item” property=”items”>
<tr><td><bean:write name=”item”/></td></tr>
</logic:iterate>
</table>
上例中<logic:iterate>有一个省略参数name,他要求填入bean的名称,如果省略的话,代表该页面相对应的form bean。Property是该bean的属性,是一个集合型变量。Id代表的是集合里的每一个元素。
如果items={“i1”,”i2”,”i3”,”i4”},则上例的结果为:
<table>
<tr><td>i1</td></tr>
<tr><td>i2</td></tr>
<tr><td>i3</td></tr>
<tr><td>i4</td></tr>
</table>
如果id代表的是一个对象,则这样使用:
<table>
<logic:iterate id=”item” name=”ItemForm” property=”items”>
<tr><td><bean:write name=”item” property=”ip1”/></td>
<td><bean:write name=”item” property=”ip2”/></td></tr>
</logic:iterate>
</table>
其中,<logic:iterate>的name参数如果是代表的该页面对应的form bean,可以省略。
Property代表该bean的一个集合类型的属性。Id代表的是该集合中的每一个元素,是对象类型的。下面就可以将”item”象对象一样引用,如item有两个属性”ip1”,”ip2”,则有<bean:write name=”item” property=”ip1”/>等等。
4
多选框的使用
<logic:iterate id="item" property="items">
<html:multibox property="selectedItems">
<bean:write name="item"/>
</html:multibox>
<bean:write name="item"/>
</logic:iterate>
在form bean里,我们有俩个集合属性items,selectedItems。在action bean里我们给他们赋值:
items={“i1”,”i2”,”i3”}
selectedItems={}
则上例转化为html的结果为:
<input type="checkbox" name="selectedItems" value="i1">i1
<input type="checkbox" name="selectedItems" value="i2">i2
<input type="checkbox" name="selectedItems" value="i3">i3
我们可以看出,selectedItems是返回结果所存的属性,而夹在<html:multibox>之间的<bean:write name=”item”/>则给出checkbox中的value属性的值。
上例中,假如用户一个都不选,提交该页面后,selectedItems={},
假设用户选第一个,提交该页面后,selectedItems={“i1”}
假如用户选第三个,提交该页面后,selectedItems={“i3”}
假如用户选第一个和第三个,提交该页面后,selectedItems={“i1”,”i3”}
如果我们在action bean里赋值:
items={“i1”,”i2”,”i3”}
selectedItems={“i1”}
则上例转化为html的结果为:
<input type="checkbox" name="selectedItems" value="i1" checked=”checked”>i1
<input type="checkbox" name="selectedItems" value="i2">i2
<input type="checkbox" name="selectedItems" value="i3">i3
如果我们在action bean里赋值:
items={“i1”,”i2”,”i3”}
selectedItems={“i1”
则上例转化为html的结果为:
<input type="checkbox" name="selectedItems" value="i1" checked=”checked”>i1
<input type="checkbox" name="selectedItems" value="i2">i2
<input type="checkbox" name="selectedItems" value="i3" checked=”checked”>i3
如果items是对象的集合,则selectedItems总是简单类型的集合,其用法为:
<logic:iterate id="item" property="items">
<html:multibox property="selectedItems">
<bean:write name="item" property=”ip1”/>
</html:multibox>
<bean:write name="item" property=”ip1”/>
,”i3”}
.<html:multibox>
.<logic:iterate>
.<html:form>
.<bean:write>
分享到:
相关推荐
Struts2.1.6是Apache软件基金会的Jakarta Struts项目的一个版本,它是一个用于构建企业级Java Web应用程序的开源MVC框架。这个版本的源代码压缩包" structs-2.1.6-src.rar"包含了开发Struts2应用程序所需的所有源...
Structs 是一个基于Java开发的轻量级Web框架,它为开发者提供了强大的MVC(Model-View-Controller)模式支持,使得构建Web应用程序变得更加高效和简单。在这个名为"Structs-demo"的示例项目中,我们可以深入理解...
在本项目中,Structs框架扮演了核心角色,它提供了MVC(Model-View-Controller)设计模式的实现,有助于分离业务逻辑、数据处理和用户界面。MVC模式是软件工程中的一种经典设计模式,用于提高代码的可维护性和可扩展...
Structs2是一个基于MVC模式的Java Web应用框架,它使得开发者能够更方便地构建动态和数据驱动的Web应用。在这个框架中,JSON支持是至关重要的,因为它允许应用程序与后端服务器或前端客户端进行JSON格式的数据交换。...
标题“spring-structs-hibernate的联合使用”指的是在Java Web开发中,Spring框架、Struts框架和Hibernate框架的集成应用。这三个框架分别是用于控制层、表现层和持久层的主流解决方案,它们的结合可以构建出高效、...
总之,"structs2-2.3.16-all.zip+jstl-1.2.jar"这个组合提供了构建Java Web应用所需的基本工具,Struts 2作为强大的MVC框架,负责处理应用的业务逻辑和流程控制,而JSTL则增强了JSP页面的功能,使得页面表现更加灵活...
在这个名为" structs-2.1.6-all\docs下.zip"的压缩包中,包含了关于Struts2.1.6的文档和相关信息,帮助开发者更好地理解和使用这个框架。 首先,`index.html`通常是文档的主入口点,它会提供整个框架的概述,包括...
Struts 2是Java Web开发中的一个开源框架,主要用于构建MVC(Model-View-Controller)架构的应用程序。Struts 2的版本2.1.6是一个较早但仍然广泛使用的版本,它提供了许多功能和改进,以提高开发效率和应用的可维护...
标题中的"spring.jar"、"spring-webmvc-struts.jar"和"spring-webmvc.jar"都是Spring框架相关的Java库文件,通常以.jar结尾的文件是Java的归档文件,包含了类、资源和元数据,用于Java应用程序的运行。这些文件在...
Struts 是一个基于 Model-View-Controller (MVC) 设计模式的 Java Web 开发框架,由 Jakarta 项目提供。它的主要目标是简化构建企业级应用程序的过程,通过提供一个控制器 servlet、一组 Java beans 和用于 JSP 页面...
Struts 是一个用于构建 MVC(模型-视图-控制器)架构的前端框架;Hibernate 则是 ORM(对象关系映射)工具,使得Java开发者可以方便地操作数据库。 首先,让我们逐一分析提供的文件及其在SSH框架中的作用: 1. `...
本文将深入探讨“自定义mvc源代码-从mvc到structs”的主题,分析不同版本的MVC(Model-View-Controller)框架的发展及其与Structs框架的联系。 MVC是一种广泛使用的软件设计模式,特别适用于Web应用开发。它将应用...
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。此压缩文件包含源代码。
Struts详解:深入理解MVC框架 Struts是Java Web开发中的一个核心框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性和可扩展性极强的应用程序的工具。MVC模式是1980年代在Smalltalk-80...
Structs2是Apache Struts框架的一个版本,这是一个基于MVC(Model-View-Controller)设计模式的Java Web应用开发框架。Struts2的核心目标是简化开发过程,提高代码的可维护性和可测试性。版本2.1.8是在Struts2系列中...
它的主要目的是提供一个用于构建企业级Web应用程序的强大的MVC(Model-View-Controller)架构。在本压缩包"struts-2.5.13-all.zip"中,包含了Struts2框架的完整版本2.5.13,这将帮助开发者快速搭建基于Struts2的项目...
Structs是一个轻量级、高性能的Java Web开发框架,它为开发者提供了强大的MVC模式支持,简化了Web应用的构建过程。本压缩包文件包含了搭建Structs环境所需的所有jar包和相关文档,使得开发者可以快速地在自己的项目...
### MVC与Struts框架详解 #### 一、MVC(Model-View-Controller)设计模式概述 MVC设计模式是一种广泛应用于软件工程的设计模式,特别适用于Web应用开发。该模式的核心在于将应用程序划分为三个相互独立的部分:...
接着,Struts2是基于MVC设计模式的Web应用框架,它简化了模型驱动的应用程序的开发。struts2.1.8.1-API.chm文档包含了Action、Result、Interceptor等核心组件的API,以及Struts2与Spring的整合方式,使得开发者可以...
Struts 是一个开源的 MVC(Model-View-Controller)框架,它被广泛应用于Java Web开发中,以提供更有效的架构模式。Struts 1.2.9是该框架的一个较早版本,它在当时非常流行,尽管现在已被更新的Struts 2所取代,但仍...