posts - 5, comments - 24, trackbacks - 0, articles - 20
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

AppFuse学习笔记-视图层 6

Posted on 2007-04-27 17:27 kook 阅读(716) 评论(0)  编辑  收藏 所属分类: J2EE

1. 程序描述
    视图层主要由JSP网页构成,此外还包括Resource Bundle资源文件及ActionForm Bean、Validation等,这些组件提供对国际化、接收用户输入的表单数据、表单验证和错误处理等的支持。
    与User的视图层有关的文件有:
    userList.jsp:用户列表页面,用于具有管理权限的用户对其他用户的管理。
    userForm.jsp:用户信息页面,用于对用户信息的增、删、改
    UserForm.java:与用户信息表单对应的ActionForm Bean
    validation.xml:对用户信息表单进行验证的配置文件
    Resource Bundle资源文件,中文的就是ApplicationResource_Zh_cn.properties
    default.jsp:用于复合网页的sitemesh文件
    JavaScript、CSS文件

2. JSP页面
    与用户相关的JSP页面包括用户列表和用户信息。head及foot等通用信息放置在head.jsp、foot.jsp中,因此userList.jsp及userForm.jsp只包含与业务相关的标签。下面介绍主要的标签功能:
    <logic:messagesPresent>:判断指定的消息是否存在。若指定message属性为true,则从request范围内检索属性key为Globals.MESSAGE_KEY的ActionMessages对象。若不指定属性,则默认检索属性key为Globals.ERROR_KEY的ActionMessages对象。在本系统中一个检索Success消息,一个检索Error消息。
    <fmt:message>:JSTL标签。用于输出Resource Bundle中的一条消息。
    <bean:struts>:用于检索Struts框架内在的对象,如ActionFormBean、ActionForward、ActionMapping。在这里用于在JSP页面上定义一个ActionForward 变量以方便其它地方的引用。forward为struts-config.xml中定义的global-forward。
    <c:set>:JSTL标签。用于定义一个变量,以方便其它地方的引用。
    <c:out>:JSTL标签。用于在页面上显示一个EL表达式的值,如显示<c:set>定义的变量。EL是JSTL采用的简单的表达式语言,该语言提供一个访问和操作应用程序数据的简单方式。
    <c:if><c:when><c:forEach><c:choose>:JSTL标签。用于处理条件的标记,根据特定的逻辑条件来控制输出网页内容,或者循环遍历集合中的所有元素。
    <display>:Display Tag的标签,用于显示控制层返回的List。可以方便的定制表格是否分页、对列排序、导出数据等。
    <html:form>:用来定义HTML表单。Struts的HTML标签可以和标准的HTML元素完成相同的功能,Struts框架能够把表单中的数据自动映射到相应的ActionForm Bean中。
    <html:text><html:password><html:hidden>:在表单上生成相应的HTML元素。
    <html:submit><html:cancel>:在表单上生成提交按钮和取消按钮。当用户按下按钮时,将产生一个提交事件或取消事件,由Action类捕获。本系统中<html:submit><html:cancel>的属性相同(均为method),用户按下提交按钮或取消按钮后执行哪个方法由lookupMethods.properties决定。
    <html-el:multibox>:在表单上生成HTML的CheckBox标签。html-el使用了JSTL扩展,可以使用EL表达式。
    <html:messages><html:errors>:用于在网页中输出消息。<html:errors>用于输出错误消息,本系统中用于显示表单中字段级的错误信息,<html:messages>显示全局的消息。
    自定义标签:
    在你最初运行ant new时,AppFuse就会根据你键入的项目名自动生成一个标签文件,在userForm.jsp中你会看到这个标签。
    <YOURAPPNAME:label>:它用于显示表单输入域前的提示文本,对文本添加了一些特别的样式,如在必填项前自动加"*"号等。
    <YOURAPPNAME:country>:userForm中有设置国家一项,该标签用于显示国家的下拉列表。
    <YOURAPPNAME:constants>:用于在页面上显示常量类org.appfuse.Constants中的常量的值。

3. ActionForm Bean
    ActionForm Bean是Struts提供的表单数据传输对象,用于在视图层和控制层之间传递HTML表单数据。控制层可以从ActionForm Bean中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm Bean中,然后把它返回给视图。
    User表单的ActionForm Bean为UserForm。UserForm继承BaseForm。BaseForm是ActionForm的子类对象,扩展了三个通用方法:toString()、equals(Object o) 和hashCode()。并定义了一个验证,用于允许用户在点击"删除"或"取消"按钮时表单无须验证。
    UserForm中定义了与用户信息表单中的字段对应的属性。

4. Validator验证框架
    Validator验证框架负责数据验证,采用基于XML的配置文件来配置验证规则。其相关的文件有:
    validation.xml:针对具体的Struts表单,为ActionForm配置所需的验证规则。
    validator-rules.xml:框架自带文件,包含了一组通用的验证规则。
    validator-rules-custom.xml:自定义验证规则。本系统中定义了验证两个指定的输入域值是否相等的规则。用于验证密码和确认密码是否相等。其实将这个方法稍微修改一下,把“=”变为“<、>”就可以验证一个域不能大于/小于另外一个域,非常的实用。
    Resource Bundle:定义验证失败时显示的提示文本。Resource Bundle 中以errors为前缀的Key绝大部分用于Validator的错误提示。
    下面是在validation.xml 中配置的userForm验证规则
      <form name="userForm">
              <field property="username"
                     depends="required">

                  <arg0 key="userForm.username"/>
              </field>
    ……………………………
    </form>
    该配置通过depends="required"定义了userForm的username字段即用户名是必填项。
    <arg0 key="userForm.username"/>声明了该字段所对应的文本在Resource Bundle中的Key。Validator会在Resource Bundle中寻找errors.required对应的文本:'{0}' 为必填项,将userForm.username对应的文本带入{0}。如用户没有填写该项,Validator会提示“'用户名' 为必填项”的消息。
    validation.xml中使用正则表达式定义了一些简单的全局的规则,如电话号码的格式等。
    默认情况下,Validator框架在Web服务器端执行表单验证。validator-rules.xml里已经定义了客户端JavaScript的生成规则,可以在JSP网页中生成JavaScript脚本。需要进行客户端验证时,在JSP中包含:
    <html:javascript formName="userForm" cdata="false"
      dynamicJavascript="true" staticJavascript="false"/>
    <script type="text/javascript"
      src="<c:url value="/scripts/validator.jsp"/>"></script>
    并在<html:form>中定义onsubmit事件:
    onsubmit="return validateUserForm(this)"
    在userForm表单的提交和取消按钮中包含了onclick="bCancel=false"事件。bCancel是Validator定义的是否进行验证的变量。当用户点击删除或取消按钮时,表单无须验证,此时bCancel= true


只有注册用户登录后才能发表评论。


网站导航: