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。
分享到:
相关推荐
### Appfuse 学习笔记 #### 一、Appfuse 简介 Appfuse 是一个开源框架,旨在帮助开发者高效地构建企业级应用。通过提供一套完善的架构模板、最佳实践和技术栈组合,使得开发者能够专注于业务逻辑的实现,而不是...
这个"appfuse-tutorial-struts-1.6.zip"文件是一个基于Struts 1.6的AppFuse教程,用于指导开发者如何构建一个企业级的人员管理系统。Struts是Apache软件基金会下的一个开源框架,专门用于构建基于MVC(Model-View-...
在"appfuse-light-webwork-spring-jdbc-1.8.2.zip"这个压缩包中,我们能看到一个基于Java 8、WebWork、Spring和JDBC的项目实例。 **Java 8** Java 8是Java平台的重大更新,引入了许多新特性,如lambda表达式、函数...
`mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts-archetype -DarchetypeVersion=2.1.0-M2 -DgroupId=cn.xue.app -DartifactId=xueAppFuse` ...
**AppFuse 学习笔记(一):安装与部署** AppFuse 是一个开源项目,它提供了一种快速构建企业级 Web 应用程序的方式。它使用了多种流行的技术栈,如 Spring Boot、Hibernate、Thymeleaf 和 Maven,使得开发者可以更...
综上所述,AppFuse 不仅是一个强大的开发框架,还是一个全面的学习资源库,可以帮助开发者快速掌握现代 Web 开发所需的各种技能。无论你是初学者还是有经验的开发者,都能从这份文档中获益良多。
《AppFuse Service 3.0.0与Closure Compiler Maven Plugin深度解析》 AppFuse Service 3.0.0 是一个开源项目,它提供了一个基础框架,用于快速开发企业级Java应用。这个版本的亮点在于其集成了一系列现代开发工具和...
【AppFuse 框架详解】 AppFuse 是一个由 Matt Raible 创建的开源项目,它为初学者提供了... mvn archetype:create -DarchetypeGroupId=org.appfuse -DarchetypeArtifactId=appfuse-basic-spring -DremoteRepositories=...
在本篇“appfuse学习笔记(二)新建模块”中,我们将深入探讨AppFuse框架的模块创建过程。AppFuse是一个开源项目,它提供了一个快速开发Web应用的基础结构,旨在简化开发流程并提高代码质量。通过AppFuse,开发者...
主要是自己从网络上搜集的一些关于appfuse1.8.2-2.0.2的一些相关资料,间或有点自己试验的记录,还有点maven和quartz的东东,之前我主要是用1.8.2构建项目,感觉还不错,希望对想学习appfuse的人有些帮助.
在本篇“appfuse学习笔记(三)解决乱码和菜单设置”中,我们将深入探讨在使用AppFuse框架时遇到的编码问题以及如何定制应用程序的菜单。AppFuse是一款开源项目,它提供了一个快速开发Web应用的基础,特别是对于Java...
**玩转AppFuse:使用AppFuse建设MVC网站** AppFuse是一个开源项目,它提供了一个快速启动MVC(Model-View-Controller)Web应用程序开发的框架。基于Java,AppFuse集成了Spring、Struts2、Hibernate等流行的技术,极...
06年时的appfuse,学习SSH架构的经典入门框架。相对比较老的资料,可以欣赏一下当时的架构,向牛人致敬
appfuse-demos-2.0.2代码生成的基本代码框架。
### AppFuse2 学习知识点总结 #### 一、AppFuse 概述 ... mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts -DremoteRepositories=...
AppFuse 是一个开源项目,专为加速 J2EE 应用程序开发而设计。...通过本文的学习,读者将能够熟练运用 AppFuse,体验其带来的高效和便捷。同时,结合 Ant 脚本,开发者可以灵活地管理和构建项目,进一步提高开发效率。