`
summerkai
  • 浏览: 93362 次
  • 性别: Icon_minigender_2
  • 来自: 农村
社区版块
存档分类
最新评论

structs--mvc

阅读更多

 

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继承于ActionFormform bean里面的属性就是应用程序要用的数据,每个属性都有gettersetter方法。Reset方法是当该form bean对应的页面点击reset按钮后执行的动作。而validate方法是对该form bean对应的页面进行输入校验。

Form bean的原则是简单,只表达jsp要用到的数据即可,不赞成在form bean里有逻辑操作,逻辑操作应在action bean里完成。

 

 

另外,通过session.setAttribute(“beanName”,bean)request.setAttribute(“beanName”,bean)设置的beanform 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里做了上述设置后,我们在名称为accountsbean里存入了一个ListList里面的元素是RadioBeanRadioBean有两个属性:labelvalue

我们看看在页面上我们怎么使用这个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>标记里,我们应用了该beanname=”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的控制器是由系统servletaction 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>是用显示只读变量,有两个参数:namepropertyName里填form bean的名称,property里填form bean里你想要显示的属性。如form beanuser.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

 

定义网页的formaction里是当网页提交后执行的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 beanProperty是该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里,我们有俩个集合属性itemsselectedItems。在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>

分享到:
评论

相关推荐

    structs-2.1.6-src.rar

    Struts2.1.6是Apache软件基金会的Jakarta Struts项目的一个版本,它是一个用于构建企业级Java Web应用程序的开源MVC框架。这个版本的源代码压缩包" structs-2.1.6-src.rar"包含了开发Struts2应用程序所需的所有源...

    Structs-demo

    Structs 是一个基于Java开发的轻量级Web框架,它为开发者提供了强大的MVC(Model-View-Controller)模式支持,使得构建Web应用程序变得更加高效和简单。在这个名为"Structs-demo"的示例项目中,我们可以深入理解...

    Structs-图书馆管理系统.zip

    在本项目中,Structs框架扮演了核心角色,它提供了MVC(Model-View-Controller)设计模式的实现,有助于分离业务逻辑、数据处理和用户界面。MVC模式是软件工程中的一种经典设计模式,用于提高代码的可维护性和可扩展...

    Structs-json_jar包

    Structs2是一个基于MVC模式的Java Web应用框架,它使得开发者能够更方便地构建动态和数据驱动的Web应用。在这个框架中,JSON支持是至关重要的,因为它允许应用程序与后端服务器或前端客户端进行JSON格式的数据交换。...

    spring-structs-hibernate的联合使用

    标题“spring-structs-hibernate的联合使用”指的是在Java Web开发中,Spring框架、Struts框架和Hibernate框架的集成应用。这三个框架分别是用于控制层、表现层和持久层的主流解决方案,它们的结合可以构建出高效、...

    structs-2.3.16-all.zip+jstl-1.2.jar

    总之,"structs2-2.3.16-all.zip+jstl-1.2.jar"这个组合提供了构建Java Web应用所需的基本工具,Struts 2作为强大的MVC框架,负责处理应用的业务逻辑和流程控制,而JSTL则增强了JSP页面的功能,使得页面表现更加灵活...

    structs-2.1.6-all\docs下.zip

    在这个名为" structs-2.1.6-all\docs下.zip"的压缩包中,包含了关于Struts2.1.6的文档和相关信息,帮助开发者更好地理解和使用这个框架。 首先,`index.html`通常是文档的主入口点,它会提供整个框架的概述,包括...

    structs-2.1.6-all\docs上.rar

    Struts 2是Java Web开发中的一个开源框架,主要用于构建MVC(Model-View-Controller)架构的应用程序。Struts 2的版本2.1.6是一个较早但仍然广泛使用的版本,它提供了许多功能和改进,以提高开发效率和应用的可维护...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    标题中的"spring.jar"、"spring-webmvc-struts.jar"和"spring-webmvc.jar"都是Spring框架相关的Java库文件,通常以.jar结尾的文件是Java的归档文件,包含了类、资源和元数据,用于Java应用程序的运行。这些文件在...

    Structs - 无废话上手指南

    Struts 是一个基于 Model-View-Controller (MVC) 设计模式的 Java Web 开发框架,由 Jakarta 项目提供。它的主要目标是简化构建企业级应用程序的过程,通过提供一个控制器 servlet、一组 Java beans 和用于 JSP 页面...

    Spirng-Structs-Hibernater框架所有要用的包

    Struts 是一个用于构建 MVC(模型-视图-控制器)架构的前端框架;Hibernate 则是 ORM(对象关系映射)工具,使得Java开发者可以方便地操作数据库。 首先,让我们逐一分析提供的文件及其在SSH框架中的作用: 1. `...

    自定义mvc源代码-从mvc到structs

    本文将深入探讨“自定义mvc源代码-从mvc到structs”的主题,分析不同版本的MVC(Model-View-Controller)框架的发展及其与Structs框架的联系。 MVC是一种广泛使用的软件设计模式,特别适用于Web应用开发。它将应用...

    structs-2.5.2

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。此压缩文件包含源代码。

    structs详解--课件

    Struts详解:深入理解MVC框架 Struts是Java Web开发中的一个核心框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性和可扩展性极强的应用程序的工具。MVC模式是1980年代在Smalltalk-80...

    SSH2整合之structs2.1.8 jar包

    Structs2是Apache Struts框架的一个版本,这是一个基于MVC(Model-View-Controller)设计模式的Java Web应用开发框架。Struts2的核心目标是简化开发过程,提高代码的可维护性和可测试性。版本2.1.8是在Struts2系列中...

    struts-2.5.13-all.zip

    它的主要目的是提供一个用于构建企业级Web应用程序的强大的MVC(Model-View-Controller)架构。在本压缩包"struts-2.5.13-all.zip"中,包含了Struts2框架的完整版本2.5.13,这将帮助开发者快速搭建基于Struts2的项目...

    搭建structs环境所有的jar包

    Structs是一个轻量级、高性能的Java Web开发框架,它为开发者提供了强大的MVC模式支持,简化了Web应用的构建过程。本压缩包文件包含了搭建Structs环境所需的所有jar包和相关文档,使得开发者可以快速地在自己的项目...

    MVC Structs

    ### MVC与Struts框架详解 #### 一、MVC(Model-View-Controller)设计模式概述 MVC设计模式是一种广泛应用于软件工程的设计模式,特别适用于Web应用开发。该模式的核心在于将应用程序划分为三个相互独立的部分:...

    spring-structs2-hibernate-ibatis-API

    接着,Struts2是基于MVC设计模式的Web应用框架,它简化了模型驱动的应用程序的开发。struts2.1.8.1-API.chm文档包含了Action、Result、Interceptor等核心组件的API,以及Struts2与Spring的整合方式,使得开发者可以...

    struts-1.2.9

    Struts 是一个开源的 MVC(Model-View-Controller)框架,它被广泛应用于Java Web开发中,以提供更有效的架构模式。Struts 1.2.9是该框架的一个较早版本,它在当时非常流行,尽管现在已被更新的Struts 2所取代,但仍...

Global site tag (gtag.js) - Google Analytics