现在的位置: 首页 > 综合 > 正文

Struts高级进阶用户注册案例的实验

2013年03月24日 ⁄ 综合 ⁄ 共 2268字 ⁄ 字号 评论关闭

增加用户名已存在的业务校验!

 

表单校验错误和业务逻辑校验错误的处理流程:

表单校验: 请求参数-->ActionForm-->ActionForm.validate-->表单校验错误则返回errors-->reguser.jsp-->显示出错误信息

业务逻辑校验:请求参数-->ActionForm-->ActionForm.validate-->表单校验成功则调用Action.execute方法-->逻辑校验错误-->产生errors-->回reguser.jsp显示错误信息 

步骤:

1.在Action中增加用户名已存在则回到输入页面并能显示出错误提示信息的代码。(假设用户名为zxx时即表示已存在)

2. 实现错误提示信息的国际化,提示信息中要用一个参数来替代字段名,即参数化。

3.将提示信息的参数值改为也从资源文件中获取,并且也是可国际化的,即参数的国际化。

4.将用户名不能为空的表单校验的错误提示信息也用一个参数来替代字段名,从而引出在formbean中的参数国际化问题,即如何得到MessageResouce对象和Locale信息。

 

 

第1步:讲业务逻辑校验时,要结合前面的FormBean表单校验图进行说明,在RegUserAction上要画一条业务逻辑校验出错后回到输入页面的连线,并提问要想在jsp页面中显示业务逻辑校验的错误,首先应该准备好什么条件?将错误提示信息放入errors对象,再将errors对象以某个特殊关键字存储进request作用域中,在刚才画的连线上注明要传递errors对象过去。表单校验(即formbean的validate方法)返回ActionErrors对象是由框架自动存储到request作用域的,业务逻辑校验(即在Action的execute方法)产生的ActionMessages对象需要自己编写代码将其保存到request作用域中。 

对于业务逻辑校验:把用户名是否存在的校验代码放在formbean中编写也是可以的,但这种方式结构不清晰,职责不明确,formbean的校验是表示数据格式的正确性,主要用于界面输入的校验。

 

AtionErrors和ActionMessages的区别,好比程序需要一个好人和一个坏人,最初设计了一个好人类,一个坏人类,后来发现,只需要设计一个人类就可以了,只是把一个人贴上好人的身份,另外一个人贴上坏人的身份,完全没必要设计两个类分别表示好人和坏人。错误提示信息和普通信息都用ActionMessage,ActionMessage即代表错误,也代表消息。一个Message本身不是什么错误,只是我们把它的信息当作错误提示信息,还是当作普通信息来看罢了。使用saveErrors储存的ActionMessages对象表示错误,即以Globals.ERROR_KEY作为属性名进行存储,使用saveMessage存储的ActionMessage对象代表普通消息,即以Globals.MESSAGE_KEY作为属性名进行存储。讲课时先演示了直接使用request.setAttribute的情况,然后说要记住关键字毕竟有些痛苦,struts提供了一个便利的方法,这就是saveErrors,再使用saveErrors改写一下。

Formbean的Validate返回的ActionErrors,而不是ActionMessages,因为用作接口的方法一旦对外公布后,即使后来发现了不妥,也不能修改这个方法了,否则将引起以前调用程序出现问题。 

 

第2步:关于消息中的参数的讲解方式,假设email和username都不能重复,那么资源文件中的error.repeated信息就要被重复使用,所以资源文件中的消息要用一个参数来表示字段名,程序中则使用new ActionMessage(key,arg0)方法构造消息对象。资源文件中的每条消息的第一个参数用{0}表示,依次类推!

 

第3步:先直接调用Action.getResource().getMessage(key)方法,发现始终都是中文消息,因为这时候用的是操作系统的Locale,于是改成调用Action.getResource().getMessage(Action.getLocale(),key)。

 

第4步:直接查看Action.getResource()和Action.getLocale()的源码,拷贝过来就可以了。getResources(request,“bundle”);的源代码要比getResources(request)复杂很多,牵扯较多细节,为了讲课顺畅快捷,这里最好是将错误信息定义在默认资源包中。

 

 

用户注册案例的实验   ——<html:form>与<html:text>标签的应用

 

步骤:

1. 使用<html:form>标签生成前面的表单, <html:form>标签的action属性的设置值是否以/开头、是否以.do结尾都是可以的。

2. 使用<html:text>和<html:password>等标签可以回显数据,

3.设置<html:password>的value属性,让密码信息不要回显。

问题:

<html:text>标签的作用?<html:text>等标签回显的数据是从哪来的呢?

 

 

问题的答案:生成一个文本输入框的html代码,其property属性值将作为文本输入框的name属性值,并使用<html:form>关联的action所关联的formbean的相应属性值来填充其中的内容。 

抱歉!评论已关闭.