`

精通struts1.2(不断更新与完善中)

阅读更多
参考资料:《Struts1.x入门与提高系列教程.pdf》感谢著作者的贡献!

DynaActionForm与常规ActionForm的区别
   1、 在配置文件中配置
    2、对属性的访问方式:与Map对象相似
    3、属性类型为标准的Java类,即用包装类型取代原生类型,如用Integer代替int
    <form-beans>
        <form-bean name="" type="">
            <form-property name="" type="" />
            ……
        </form-bean>
        ……
    </form-beans>

HTML标签库

    以Key为后缀的属性值就是属性文件的key
    <html:link forward="">
        forward指向配置文件中已经存在的forward
            <global-forwards>
                <forward name="" path="" />
            </global-forwards>
    <html:form action="" method="">
    <html:text property=""/>
    <html:radio property="" value=""/>
            当ActionForm的子类对象的某个属性有多个可枚举的选择值时,可使用,value表示当前选项被选中后,提交到服务端的值。
    <html:checkbox property="" value="">
            对应一个值
    <html:multibox property="" value="">
            property所对应的属性是数组类型
    <html:select property="">
        <html:option value=""/>
        ……
    </html:select>
    <html:sumbit value=""/>
    <html:reset value=""/>

Logic标签库

    <logic:parent name="">
        <logic:iterate id="" name="">
        </logic:iterate>
    </logic:parent>
    循环标签:<logic:iterate id="" name="" property="" indexId="" offset="" length="" scope="" />
    条件处理标签:
        Test:present,notPresent,empty,notEmpty,messagesPresent,messagesNotPresent
        比较:equal,lessThan,lessEqual,greaterThan,greaterEqual
        字符串匹配:match,notMatch
        所有的条件处理标签都有name和property属性
    流程控制标签:<logic:redirect><logic:forward>

解决ActionForm中文乱码
    有很多种,这里列举过滤器,记得在web.xml配置:
        public EncodingFilter extends Filter
        {
                public void destroy(){}
               
                public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
            {
                    request.setCharacterEncoding("GBK");
                    chain.doFilter(request,response);
            }

            public void init(FilterConfig filterConfig)throws ServletException{}
        }

strut-config.xml配置文件

    action标签中的input属性:表示为通过验证后要跳转到的页面
    message-resources标签:定义程序中所使用的属性文件,parameter属性表示属性文件的路径,后缀.properties可不加,“.”可用“/”或“‘’”代替。

解决属性文件中文乱码:
    原因:Java在处理属性文件时,只能处理ISO 8859-1或UCS-2编码格式,若含有其他编码格式的字符,仍然会按ISO 8859-1或UCS-2编码格式来解释这些字符。
    方法一:用native2ascii命令
        <JDK安装目录>\bin\native2ascii
        属性文件全名  属性文件全名(注:这种方式会覆盖旧文件)
        属性文件全名 新属性文件全名(注:这种方式则不会)
    方法二:用Eclipse插件
        Properties Editor插件
        JInto插件

Bean标签库:

    优点:1、国际化,即能从属性文件中读取文本信息
                2、避免直接使用Java代码获得存储在request和session对象的内容

<%@taglib uri="" prefix=""%>
    uri属性值定位标签库的方式:直接或者用标签库的相对路径
    一、获得HTTP请求信息
       <bean:cookie id="" name="" value=""/>
        <bean:header />
        <bean:parameter />
                若忽略value属性,则name属性说对应的对象不存在时,会抛出异常,通常要加上value属性;变量保存在page范围
    二、访问Java对象
        <bean:define id="" name="" property="" scope="" toScope="" />将Java对象的属性值保存在变量中
        <bean:size id="" name="" />获得集合或数组的长度
    三、访问JSP内嵌对象和Struts配置对象
        <bean:page id="" property="" />
                property属性值为JSP内嵌对象名(application,config,request,response,session)
        <bean:struts id="" formBean=""|| mapping="" ||forward="" />
     四、访问Web资源文件及属性文件
        <bean:include id="" href="绝对路径" page="/开头的相对路径" forward="forward标签的name属性值,访问其所对应的path属性所指定的web资源文件"/>
        <bean:resource id="" name="相对路径" input="指定时id变量为inputstream类型,反之则为String类型"/>
            与<bean:include>的区别:访问Web资源时,不执行,保存原始内容到变量,而<bean:include>保存的是执行后的结果
        <bean:message  key="" bundle="" name="" property="" scope="" arg0~arg4="" />
            不指定bundle时,使用默认属性文件,其值对应<message-resources>的key值;
    五、用<bean:write>输出信息
        <bean:write name="" property="" filter="" formate="" formateKey="" bundle="" scope="" />

上传单个文件

    <html:file property="" />
    原理:通过property属性返回的FormField对象,获得InputStream对象。
    FormField是一个接口,常用方法:
        getInputStream()、getFileData()、getFieldName()、getFileSize()、destroy()
    注意:
        <html:form enctype="multipart/form-data"/>;
        struts-config.xml中的<controller maxFileSize=""/>限制上传文件大小;
        在web.xml中配置上传路径,获得上传路径的方法:
this.getServlet().getServletConfig().getInitParameter()

上传任意多个文件:
    稍微复杂了点,涉及到DOM及JavaScript技术

Validator验证框架

安装:在struts-config.xml中添加 <plug-in className="org.apache.struts.validator.ValidatorPlugIn"><set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator1.xml"/>

注意:使用Validator框架,Form类必须继承ValidatorForm,原因:Validator继承自ActionForm,重写了validate方法,故可不用在Form类中写该方法。
<form-validation>
    <formset>
        <form name="">
            <field property="" depends="">
                <msg name="" key=""/>
                <arg name="" key="${}" position="" resource=""/>
                <var>
                    <var-name></var-name>
                    <var-value></var-value>
                </var>
            </field>
        </form>
    </formset>
</form-validation>

验证嵌套属性:可用圆点符号来访问
验证索引属性:<field indexedListProperty="" depends="">
两者配合使用:<field indexedListProperty="" property="" depends="">

全局常量:放在第一个<formset>前面
    <global>
        <constant>
            <constant-name></constant-name>
            <constant-value></constant-value>
        </constant>
    </global>
    <formset></formset>(第一个formset)

局部常量:放在formset的开始位置
    <formset>
        <constant>
            <constant-name></constant-name>
            <constant-value></constant-value>
        </constant>
        <form></form>
    </formset>

客户端验证:
    在JSP页面除了<%%><%-- --%>外的任意位置添加<html:javascipt formName=""/>,在<html:form>添加onsumbit="return validate首字母大写的Form名(this)"
*this*表示当前属性的值

国际化

客户端编码:
    对于JSP页面:<%page contentType="text/html;charset=UTF-8"%>
    对于静态页面(如html):在<head>添加<meta http-equiv="content-type" content="text/html;charset=UTF-8">
    也可在struts-config.xml添加<controller contentType="text/html;charset=UTF-8" />,那样所有通过.do或<forward>访问的页面都会继承该编码设置

多语言支持涉及到的知识点:
    java.util.Locate,一个Locate类的对象实例代表一种语言
session.setAttribute("org.apache.struts.action.LOCALE",new java.util.Locate(""))
    setLocale(request,new java.util.Locale("zh","TW");第一个参数zh表示语言,第二个表示地区,不区分大小写
    所有经过<forward>或.do的程序都会继承setLocale方法设置后的语言,除了<action>的forward和input属性所指的页面。

动态Form

属性类型:简单属性、索引属性、映射属性、嵌套属性
注意:使用动态Form,就无法使用泛型进行自动类型转换
    DynaActionForm获取属性的方法:
        public Object get(String name)//读取简单属性
        public Object get(String name,int index)//索引属性
        public Object get(String name,String key)//映射属性
        public String getString(String name)
        public String[] getStrings(String name)
DownloadAction
LocaleAction:是一个final动作类
IncludeAction
ForwardAction
EventDispatchAction



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics