zoukankan      html  css  js  c++  java
  • 再读Struts1.3.5 User Guide 2 Building View Components

    再读Struts-1.3.5 User Guide 2 

    第二部分 Building View Components 
    1. Struts framework在view方面提供的东西有:MessageResource(for i18n), Formbean用来自动组装form表单和提供validation,taglibs 

    2. Internationalized Messages. 国际化,JAVA语言本身在国际化方面提供了如下支持: 

    (1) Locale class. 用来给我们定义一个locale 
    (2) ResourceBundle. 这其实是一个抽象类,不是一个实现,通过这个接口里面的方法,我们可以把文字信息放到文件中来读取。 
    (3) PropertyResourceBundle. 这是最常用的一个ResourceBundle的实现,将文本信息放到properties文件中读取。 
    (4) MessageFormat. JAVA的这个类允许我们在文本信息中加入参数信息,比如,在文本信息中加入{0}表示传给这个字符串的第一个参数,{1}是第二个参数,通过这种方式,可以让我们动态生成字符串,而不是字符串都是写死在properties文件中的。 

    Struts为我们提供了MessageResources类帮我们实现i18n,这个类的实现就采用了JAVA上述的一些基础类。为了使用这个类,为了在我们的web程序中添加国际化的特性,我们需要在struts-config.xml中加入这样的配置: 

    <message-resources parameter="com.mycompany.mypackage.MyApplication"/> 

    即定义我们的properties文件的basename,在com.mycompany.mypackage这个目录下,我们可以有这样一些properties文件: 

    MyApplication.properties 
    MyApplication_xx.properties(这里的xx是两位字符的国家代号,代号列表参考http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html) 

    3. Automatic Form Population. 通过把form和bean联系在一起,可以让我们的form在初始化的时候就从bean获得value,避免了以往的手动编码。以往要这样: 

    <input type="text" name="username" 
    value="<%= loginBean.getUsername() >"/> 

    现在用Struts,只要这样: 

    <html:text property="username"/> 

    除此以外,Struts还支持文件上传的标签,可以轻松实现上传 

    4. Automatic Form Validation. Formbean有一个validate方法可以用来给我们存放输入验证的代码,前面已经提到,formbean是继承自ActionForm的class,在formbean的代码中我们可以override validate这个方法: 

    validate(ActionMapping mapping, HttpServletRequest request); 

    该方法会在bean的property被设置完成(根据用户输入的form value来set formbean的property)后,在调用Action class的execute方法之前被调用。这个方法可以有这样两种行为: 

    (1) 如果验证通过,可以return null或者是一个zero-length的ActionErrors instance. 
    (2) 如果验证没有通过,需要return一个ActionErrors的实例,然后request会被forward回input页面,在input页面中通过<html:errors/>来显示这些验证失败的信息。 

    默认的formbean(比如使用了DynaFormBean),validate方法都是return null,所以总是直接调用到Action class的execute方法。Struts建议将一些简单的输入错误的验证放到validate中,将business logic的验证放到Action class中。 

    5. The Struts Validator. Struts为我们做了一些现成的Validator,要使用这些Validator,需要做这样几个步骤: 

    (1) 我们的FormBean要从ValidatorForm继承 
    (2) JSP页面中必须要包含<html:javascript>这样的代码 
    (3) 必须在validation.xml中定义form的validator,比如: 

    CODE: SELECT ALL
    <form-validation>
    <formset>
    <form name="logonForm">
      <field property="username" depends="required">
        <msg name="required" key="error.username"/>
      </field>
    </form>
    </formset>
    </form-validation>


    (4) 最后,在struts-config.xml中将Struts Validator这个plugin加载上(Struts Validator是一个extra的组件,不是一个标配的组件):

    CODE: SELECT ALL
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property
    property="pathnames"
    value="/org/apache/struts/validator/validator-rules.xml,
        /WEB-INF/validation.xml"/>
    </plug-in>


    上述步骤中,要求我们的formbean要从ValidatorForm继承,这是因为Struts的ValidatorForm做了一些工作,他能从我们所写的validation.xml中读取validate的信息,然后生成相应的javascript代码。 

    最后还有非常重要的一点,那就是,如果我们需要使用validator中的判断form中某项是否是int,float等这些基础数据类型的时候(反正就是非String类的东西),要记得设置ActionServlet的convertNull这个init参数为true。如果不这样做的话,那对int,float等的validator都将失效,因为默认这个parameter是0。 

    6. Tiles. 可以利用Tiles来定义(在xml中)一个page的layout,然后在xml中定义page中包含那些tile的jsp file。对这个东西没什么兴趣。 

    7. Rendering Text. 这一项非常重要! 这一段介绍了如何在Struts的Action中直接返回一些文字,而不是return一个ActionMapping(ActionMapping都是会发生页面跳转的)。这对于我们目前正在做的Ajax是很重要的,因为对Ajax的请求,很多时候是不需要返回一个page的,而且是不允许后台做任何页面跳转的动作的。后台只需要返回Ajax关注的一些文本,然后前台用javascript更新相应的东西就OK了。这里介绍了应该这样做:

    response.setContentType("text/plain"); // or text/xml
    PrintWriter writer = response.getWriter();
    // use writer to render text
    return(null);

    OK? 其实只要在Action类中return一个null就OK了。不要return一个mapping了。
  • 相关阅读:
    前端学习数据库之子元素
    最详细win7下手动搭建PHP环境:apache2.4.23+php7.0.11
    Javascript实现页面跳转的几种方式
    读书笔记:《HTML5开发手册》Web表单
    C#开发微信门户及应用(26)-公众号微信素材管理
    APP开发基础知识
    C#学习路线
    ASP.NET机制详细的管道事件流程
    SQL Serve中的6种事务隔离级别简单总结
    Asp.net设计模式笔记之一:理解设计模式
  • 原文地址:https://www.cnblogs.com/super119/p/1935005.html
Copyright © 2011-2022 走看看