Struts应用篇(一)

StrutsDynActionForm:

 

   DynaActionForm提供了一种方便的机制,一定程度上解决了ActionForm的重复存在理由,而且也为在Struts里实现动态的DTO带来了一个简便的实现方式。DynaActionForm可允许动态的和页面中的表单属性同步(而不用重构)。这意味着你能够在你的struts-config.xml文件中定义属性并且将表单类型设置为org.apache.struts.action.DynaActionForm。不需要写对应的ClassDynaActionForm使用Apache公共项目中的DynaBean完成这些操作。这一动态的行为是通过反射(reflection)与哈希图(Hashmaps)提供的,所以任何事物都是双刃剑,他的灵活是在牺牲了部分性能的前提下实现的.但我们都不是完美主义者,实效是第一。难道我们因为反射的那点消耗就抛弃SpringIoc?随之而来的抛弃基于IocAop?就和找老婆一样,我要的是综合性能最好,不难看,贤惠,持家有道,满足了。

 

DynaActionForm是在struts-config.xml文件中使用<form-bean><form-property>标记定义的,下面我们将以登陆这个经典例子介绍其使用:

<form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
    
<form-property name="userName" type="java.lang.String"/>
    
<form-property name="passWord" type="java.lang.String"/>
</form-bean>


JSP
页面和普通ActionForm下使用相同。就连struts-config.xml中的对应action标记配置也是相同的。

 

有所不同是在Action中的访问代码:

DynaActionForm loginForm = (DynaActionForm)form;

 

通过DynaActionForm里的Object getString propertyName)方法获取对应属性的值,通过void set(String propertyName , Object value)为指定名称的属性赋值。

 

这样当页面表单内容进行改变时,只要对XML文档进行些须改动就可以了。对于那些在“善变”的项目经理或系分下过日子的Coder都可以考虑下,不然被他们折磨可不是一件舒坦的事。

 

饭后小甜点:

1、对于表单采取Checkbox类型的,对应属性类型应类似为java.lang.String[]

2、  要实现ActionForm中的reset()可以通过initialize(ActionMapping mapping)替代

3、  要实现validate()方法,通过Validator框架

StrutsDispatchAction:

  可能很多朋友编写Struts程序的时候在他的Action里面一般都只会有一个execute()方法,或者说只有一个返回值为ActionForward的方法。这里给大家提供一种可以将多个Action合并为一个Action的方法,即我们的Action里将存在多个返回值为ActionForward的方法,而且可以让多个动作里的Action都是一个,但他们行使不同的操作。

实现方式:以前我们的Action都是继承org.apache.struts.action.Action,那么现在我们换个方式,继承于org.apache.struts.action.DispatchAction。然后我们在里面写上若干返回值为ActionForward的方法。

这个时候可能很多朋友问,那我们能不能把所有的Action都写到一个里面呢?可以,但不推荐,我推荐将相关的操作放一起,例如:对于某张表的CRUD操作。例如登入、出。这样维护要方便,开发也可以模块化。

 

那么下面我介绍下对非executeAction方法访问的方法:

首先,你必须在对应Actionaction配置中加入parameter属性,并且给他一个值,例如:

<action  path=”/GoodsSave” type=”edu.yclc.struts.action.GoodsSaveAction”

name=”goodsSaveForm”

scope=”request”

attribute=”goodsSave”

parameter=”method”>

这里我给的值是method

 

那么我们可以通过GoodsSave.do?method=insert的方式调用名称为insert的对应的Action方法。其他方法同理。

 

 

Struts之多模块开发:

在开发中,经常出现一个项目有多个Coder负责分块开发的,但开发完毕后项目的整合却是个很大的问题,Struts在这方面也提供了强力支持。

web.xml中相关ActionServlet的配置默认下有个参数:

<init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>

用于指定对应的struts配置信息,在下面模块开发中,开发者可以替换点该部分为自己的:例如:

<init-param>
         <param-name>config/
Goods
</param-name>
         <param-value>/WEB-INF/struts-config-goods.xml</param-value>
    </init-param>

 

到最后做整合的时候只需要将所有模块的文件拷贝到一起,然后将下面模块的init-param内容放置到主模块的web.xml相应位置即可。

那么如何访问各个模块的内容呢?例如主模块要访问子模块内容?

例如访问子模块中的GoodsSave.do,可以通过如下方式:

<html:form action=”/Goods/GoodsSave”>注意和配置文件中的子模块名相同的地方

 

以上对Struts应用的3个方面做了一个简单的介绍,下一次将对Struts中利用Token Ring实现防表单被重复提交进行一个介绍,并且给出小笔以前在项目中用AOP实现的相同功能的类的说明。然后简单介绍下Validator框架的简单使用。

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值