Struts1回显表单数据,解决中文乱码,重复提交等技巧

*1 struts1标签回显表单项数据

a)传统方式数据回显:

<input ${fn:contains(fn:join(registerForm.likes,”#”),”sing”)==true?’checked’:”}

type=”checkbox” name=”likes” value=”sing”/>唱歌

b)使用struts1标签来完成数据回显:

>>将register.jsp中的所有标签使用struts1的html标签,例如:<html:form/>,<html:text/>….

c)struts1的标签不是一个基本标签,底层都是处理类,在使用struts1标签时,可以省略当前web应用的名称和请求的扩展名

d)原理

<html:form/>标签会自动从域中检索ActionForm,如果域中没有ActionForm,则会创建一个空的ActioForm,再将数据

装入ActionForm中;如果有,由以”BEAN”为关键字,取出ActionForm,由<html:text/>之类的标签取得数据进行回显

通常<html:form/>和<html:text/>配合使用

可以明显的发现,完全不用掌握EL表达式的知识,也不用掌握Jsp脚本语言的知识,简单的时候用Struts标签就能够实现强大的表单效果.

*2 struts1中文乱码解决方案

a)Filter

filter-name

filter-class

url-pattern

b)扩展ActionServlet,覆写doXxxx()方法,要在web.xml文件中配置

需要在web.xml修改核心控制器

c)扩展RequestProcessor,覆写process()方法,要在struts-config.xml文件中配置

<controller processorClass=”cn.itcast.web.struts1.core.MyRequestProcessor”/>

注意:项目中,通常不采用该二种做法

d)ActionForm的何作用

请求参数收集器/参数验证器/doXxx()编码转换器

e)通过ActionForm来完成编码转换

reset(post)

setXxxx(get)

clip_image002

*3 表单重复提交

开发步骤:

a)用户首先访问Action,在该Action中,通过this.saveToken(request);

b)在Jsp中使用<html:form/>标签,该标签具有自动发送隐藏数据的功能

c)在处理的Action中,使用this.isTokenValid(request)判段表单是否重复提交,true表示成功,false表示重复提交

d)在提交成功后,通过this.resetToken(request)删除HttpSession中原标识符的值

e)request.getSession()和request.getSession(false)

含义如下:如果使用空参方法创建session,表示一定会返回session

如果使用false参数的方法创建session,表示有可能返回null

*4 表单数据业务逻辑校验

a)在Action中的验证,称之为业务逻辑检证

b)当通过JS方法传中文时,一定在通过encodeURI()对中文编码,在Action中,通过URL解码

c)项目中,每种不同的业务使用各自独立的ActionForm

5 使用DispatchAction

a)当需要在一个Action中处理多个类似的业务方法时

b)该Action同时只能使用一个ActionForm

c)<action parameter=”method”/>表示参数的名字,对应的参数值即为Action中方法的名字

d)DispatchAction是Action的子类,因此在DispatchAction的子类中无需重写execute()方法,只需增加多个类似方法签名的

业务方法

*6 使用MappingDispatchAction

a)当需要在一个Action中处理多个类似的业务方法时,同时又需要使用1个或多个ActionForm时

b)<action parameter=”loginMethod”/>表示需要执行的业务方法

c)项目中优先使用MappingDispatchAction

clip_image004

张 大鹏

北京理想国惠玩科技有限公司CEO

发表评论

电子邮件地址不会被公开。 必填项已用*标注