Java Web编程的主要组件技术——Struts的高级功能
参考书籍:《J2EE开源编程精要15讲》
Struts对国际化的支持
"国际化"(I18N)指一个应用程序在运行时能根据客户端请求所来的国家/地区、语言的不同显示不同的用户界面。要用Struts实现国际化,所要用的各种语言版本的"标签"信息存放在不同的属性文件中,每个文件对应一个语言版本。文件名后缀必须为properties,前缀名由开发者确定,其中的语言种类字段必须是有效的ISO(International Standardization Organization,国际标准化组织)语言代码,如:汉语-Zh、英语-En等。文件名前缀中默认(书上说"默认",但我感觉应该是"没有"才对)语言代码的为默认属性文件。当系统找不到与客户端请求的语言属性匹配的属性文件时,则使用该默认属性文件。
对《Struts入门》中的登录系统进行国际化处理
1) 首先创建英文和中文版的资源文件
ApplicationResources.properties
title.login=Login Page
label.username=Input your username
label.password=Input your password
item.submit=Submit
item.reset=Reset
message.success=you're successful to login in.
message.failure=you fail to login
ApplicationResources_zh.properties
title.login=\u767B\u9646\u9875\u9762
label.username=\u59D3\u540D
label.password=\u5BC6\u7801
item.submit=\u767B\u9646
item.reset=\u91CD\u7F6E
message.success=\u4F60\u5DF2\u6210\u529F\u767B\u9646
message.failure=\u4F60\u767B\u9646\u5931\u8D25
PS:在Myeclipse中新建ApplicationResources_zh.properties,在编辑区选择Properties窗口,添加完键值对后,自动将中文转码
2) 在struts-config.xml中进行配置
<message-resources parameter="struts/ApplicationResources" /> (parameter属性取决于属性文件在工程中的位置,此处文件在struts包内)
3) 修改页面,利用<bean:message>标记从资源文件中读取标签信息代替原来的字符文本
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html>
<head>
<title><bean:message key="title.login"/></title>
</head>
<body>
<html:form action="/login">
<bean:message key="label.username"/> : <html:text property="username"/><html:errors property="username"/><br/>
<bean:message key="label.password"/> : <html:password property="password"/><html:errors property="password"/><br/>
<html:submit property="submit">
<bean:message key="item.submit"/>
</html:submit>
</html:form>
</body>
</html>
当只有默认资源文件的情况下,登陆页面显示英文;当加入中文版资源文件后,登陆页面显示中文
DispatchAction类
通常一个Action类中只完成一个业务操作(execute(),不过其实能在execute()方法中根据传进参数的不同调用不同的方法),创建一个扩展DispatchAction的子类,不必覆盖execute()方法,而是创建一些实现具体业务逻辑操作的方法,这些方法与execute()方法有相同的参数和返回值,如
public class MyDispatchAction extends DispatchAction {
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
return mapping.findForward("add");
}
public ActionForward edit(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
return mapping.findForward("edit");
}
}
在配置DispatchAction类时,需要指定parameter属性为method
当编写触发DispatchAction的代码时,不仅指明映射路径,还需要加上一个名为method的参数,如
http://localhost:8080/login/users?method=add
调用对应DispatchAction的add方法
动态ActionForm
如果ActionForm对应的HTML表单添加或删除属性,ActionFrom类就可能需要修改重新编译,于是引入动态ActionForm(DynaActionForm)的概念。动态ActionForm允许用户无须为应用程序的每一个HTML表单创建具体的ActionForm类。
动态ActionForm支持在Struts配置文件struts-config.xml中完成ActionForm的全部配置,无须编写额外Java代码。如:
<form-beans >
<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>
</form-beans>
<form-bean>元素的type属性设置为DynaActionForm或其子类。<form-bean>中包含<form-property>子元素标记动态表单的属性,type属性指定了属性类型,属性类型必须是标准Java类,并使用它们的包装类,如int-Integer,long-Long,float-Float,double-Double,boolean-Boolean。
当需要添加新类型时,只需要修改配置文件()。在Action中访问动态ActionForm
DynaActionForm loginForm = (DynaActionForm) form;
String username=(String)loginForm.get("username");
String password=(String)loginForm.get("password");
Validator验证框架
通过配置验证规则实现验证功能,不需要编写代码,能最大限度的重用同一个验证规则。需要用到validator-rules.xml和validation.xml文件,validator-rules.xml文件包含了一组通用的验证规则,一般不需要修改,直接部署在相应的WEB-INF文件夹中即可;validation.xml由开发者自行规定。
详情请见:
http://www.blogjava.net/nokiaguy/archive/2009/02/12/254421.html
国际化示例 简单登陆系统:http://pan.baidu.com/s/1bnhKAcR
Java Web编程的主要组件技术——Struts的高级功能的更多相关文章
- Java Web编程的主要组件技术——Struts入门
参考书籍:<J2EE开源编程精要15讲> Struts是一个开源的Java Web框架,很好地实现了MVC设计模式.通过一个配置文件,把各个层面的应用组件联系起来,使组件在程序层面联系较少 ...
- Java Web编程的主要组件技术——Struts核心组件
参考书籍:<J2EE开源编程精要15讲> Struts配置文件struts-config.xml Struts核心文件,可配置各种组件,包括Form Beans.Actions.Actio ...
- Java Web编程的主要组件技术——MVC设计模式
参考书籍:<J2EE开源编程精要15讲> MVC(Model View Controller),Model(模型)表示业务逻辑层,View(视图)代表表述层,Controller(控制)表 ...
- Java Web编程的主要组件技术——JDBC
参考书籍:<J2EE开源编程精要15讲> JDBC(Java DataBase Connectivity)是Java Web应用程序开发的最主要API之一.当向数据库查询数据时,Java应 ...
- Java Web编程的主要组件技术——Hibernate核心组件
参考书籍:<J2EE开源编程精要15讲> Hibernate配置文件 1) hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8 ...
- Java Web编程的主要组件技术——Servlet
参考书籍:<J2EE开源编程精要15讲> Servlet是可以处理客户端传来的HTTP请求,并返回响应,由服务器端调用执行,有一定编写规范的Java类. 例如: package test; ...
- Java Web编程的主要组件技术——Hibernate入门
参考书籍:<J2EE开源编程精要15讲> Hibernate是对象/关系映射(ORM,Object/Relational Mapping)的解决方案,就是将Java对象与对象关系映射到关系 ...
- Java Web编程的主要组件技术——JSP
参考书籍:<J2EE开源编程精要15讲> JSP(Java Server Page)页面由HTML代码和嵌入其中的Java代码组成. 简单的JSP页面如: <html> < ...
- 五分钟学Java:如何才能学好Java Web里这么多的技术
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...
随机推荐
- html利用锚点实现定位代码实例
本章节介绍介绍一下如何利用锚点实现定位,使用锚点实现定位是html固有的功能,当然比较简单,也实现了基本的功能,但是功能相对简单一些,如果想要实现平滑的定位可以参阅jquery实现的点击页面动画方式平 ...
- 企业运营对 DevOps 的「傲慢与偏见」
摘要:出于各种原因,并非所有人都信任 DevOps .有些人觉得 DevOps 只不过给开发者改善产品提供了一个途径而已,还有的人觉得 DevOps 是一堆悦耳的空头支票,甚至有人认为 DevOps ...
- POJ2752 Seek the Name,Seek the Fame KMP算法
KMP继续练手.题目问的是一个串前缀等于后缀的可能长度是哪些,输出来.题目考的是对KMP失配指针的理解,当最后一位失配(即'\0'那里)时,指针会移动到前缀对应匹配的部分,所以这个长度是我们要的,然后 ...
- NuGet学习笔记——初识NuGet及快速安装使用
源自:http://kb.cnblogs.com/page/143190/
- TopCoder SRM 633div1
250pts PeriodicJumping 题意:从起点开始,每次按找数组jump给定的长度,即jump[0], jump[1], jump[2].....jump[n-1], 向各个方向跳,跳 ...
- P1005 采药
P1005 采药 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2005复赛普及组第三题 描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的 ...
- My_Plan part1 小结
数位DP AC十道题目以上 成就达成 八月份!三个月!想想就令人兴奋呢 开始写总结啦 貌似简单的数位DP只需要改改模板就可以啦 就按照我的做题顺序开始总结吧 先是学习了一发模板:http://www. ...
- 李洪强iOS开发之OC语言构造方法
OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...
- lintcode :数组剔除元素后的乘积
题目: 数组剔除元素后的乘积 给定一个整数数组A. 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法. 样例 给出 ...
- Java 按字节获得字符串(中文)长度
引自:http://songjianyong.iteye.com/blog/1552973 package cn.com.songjy.test; import java.io.Unsupported ...