zoukankan      html  css  js  c++  java
  • Java Web编程的主要组件技术——Struts的高级功能

    参考书籍:《J2EE开源编程精要15讲》

    Struts对国际化的支持

      "国际化"(I18N)指一个应用程序在运行时能根据客户端请求所来的国家/地区、语言的不同显示不同的用户界面。要用Struts实现国际化,所要用的各种语言版本的"标签"信息存放在不同的属性文件中,每个文件对应一个语言版本。文件名后缀必须为properties,前缀名由开发者确定,其中的语言种类字段必须是有效的ISO(International Standardization Organization,国际标准化组织)语言代码,如:汉语-Zh、英语-En等。文件名前缀中默认(书上说"默认",但我感觉应该是"没有"才对)语言代码的为默认属性文件。当系统找不到与客户端请求的语言属性匹配的属性文件时,则使用该默认属性文件。

      对《Struts入门》中的登录系统进行国际化处理

      1) 首先创建英文和中文版的资源文件

      ApplicationResources.properties

    1 title.login=Login Page
    2 label.username=Input your username
    3 label.password=Input your password
    4 item.submit=Submit
    5 item.reset=Reset
    6 message.success=you're successful to login in.
    7 message.failure=you fail to login
    View Code

      ApplicationResources_zh.properties

    1 title.login=u767Bu9646u9875u9762
    2 label.username=u59D3u540D
    3 label.password=u5BC6u7801
    4 item.submit=u767Bu9646
    5 item.reset=u91CDu7F6E
    6 message.success=u4F60u5DF2u6210u529Fu767Bu9646
    7 message.failure=u4F60u767Bu9646u5931u8D25
    View Code

      PS:在Myeclipse中新建ApplicationResources_zh.properties,在编辑区选择Properties窗口,添加完键值对后,自动将中文转码

      2) 在struts-config.xml中进行配置

      <message-resources parameter="struts/ApplicationResources" /> (parameter属性取决于属性文件在工程中的位置,此处文件在struts包内)

      3) 修改页面,利用<bean:message>标记从资源文件中读取标签信息代替原来的字符文本

     1 <%@ page language="java" pageEncoding="UTF-8"%>
     2 <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> 
     3 <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
     4  
     5 <html> 
     6     <head>
     7         <title><bean:message key="title.login"/></title>
     8     </head>
     9     <body>
    10         <html:form action="/login">
    11             <bean:message key="label.username"/> : <html:text property="username"/><html:errors property="username"/><br/>
    12             <bean:message key="label.password"/> : <html:password property="password"/><html:errors property="password"/><br/>
    13             <html:submit property="submit">
    14                 <bean:message key="item.submit"/>
    15             </html:submit>
    16         </html:form>
    17     </body>
    18 </html>
    View Code

      当只有默认资源文件的情况下,登陆页面显示英文;当加入中文版资源文件后,登陆页面显示中文

    DispatchAction类

      通常一个Action类中只完成一个业务操作(execute(),不过其实能在execute()方法中根据传进参数的不同调用不同的方法),创建一个扩展DispatchAction的子类,不必覆盖execute()方法,而是创建一些实现具体业务逻辑操作的方法,这些方法与execute()方法有相同的参数和返回值,如

     1 public class MyDispatchAction extends DispatchAction {
     2     public ActionForward add(ActionMapping mapping, ActionForm form,
     3             HttpServletRequest request, HttpServletResponse response) {
     4         // TODO Auto-generated method stub
     5         return mapping.findForward("add");
     6     }
     7     public ActionForward edit(ActionMapping mapping, ActionForm form,
     8             HttpServletRequest request, HttpServletResponse response) {
     9         // TODO Auto-generated method stub
    10         return mapping.findForward("edit");
    11     }
    12 }
    View Code

      在配置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代码。如:

    1 <form-beans >
    2     <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm" >
    3         <form-property name="username" type="java.lang.String" />
    4         <form-property name="password" type="java.lang.String" />
    5     </form-bean>
    6   </form-beans>
    View Code

      <form-bean>元素的type属性设置为DynaActionForm或其子类。<form-bean>中包含<form-property>子元素标记动态表单的属性,type属性指定了属性类型,属性类型必须是标准Java类,并使用它们的包装类,如int-Integer,long-Long,float-Float,double-Double,boolean-Boolean。

      当需要添加新类型时,只需要修改配置文件()。在Action中访问动态ActionForm

    1 DynaActionForm loginForm = (DynaActionForm) form;
    2 String username=(String)loginForm.get("username");
    3 String password=(String)loginForm.get("password");
    View Code

    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

  • 相关阅读:
    入门学习嵌入式260期手把手配套视频7个项目实战送书
    使用from 的setTimeOut方法实现定时关闭Form
    C#面试题
    《JS语法字典》网友总结
    简单SQL语句小结
    面试前的简历
    Hello World的17种写法(C#)(转贴)
    张芸京 偏爱
    关于我对.setTmp()的理解及应用
    VS 2005使用技巧
  • 原文地址:https://www.cnblogs.com/cqq626/p/4324236.html
Copyright © 2011-2022 走看看