struts 笔记(王勇)

来源:互联网 发布:图像复原的数据集 编辑:程序博客网 时间:2024/06/18 07:32

struts中是通过ActionContext.getContext().getSession().put("goodinfo", goodinfo);将值传到前段页面的。



1.Struts的作用就是将客户端的请求与返回的结果给分开。

2.

3.

4.



1、动态ActionForm

动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准

ActionForm的所有功能

struts-config.xml文件中定义动态ActionForm,如:

<form-beans>

<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">

<form-property name="username" type="java.lang.String" />

<form-property name="age" type="java.lang.Integer"/>

</form-bean>

</form-beans>

*Action中使用动态ActionForm,参见DynaActionFormTestAction.java

DynaActionForm daf = (DynaActionForm)form;

String username = (String)daf.get("username");

Integer age = (Integer)daf.get("age");

动态ActionForm其实是把页面中的html元素的名字和值放到了map中,所以通过get方法可以取出相应的值

动态ActionForm采用EL表达式的输出方式,${dynabean.map.prop}, 参见:dyna_actionform.jsp

动态Action的验证,通常使用动态验证框架validator

2、采用struts上传文件

页面的配置,如:

 <form action="upload.do" method="post" enctype="multipart/form-data">

  标题:<input type="text" name="title"><br>

  文件:<input type="file" name="myfile"><br>

  <input type="submit" value="提交">

  </form>

 * ActionForm中使用FormFile来接收上传的文件,参见:UploadActionForm.java

 Action中调用FormFile取得上传文件数据,采用流输出,即完成上传,参见:UploadTestAction.java

 采用<controller/>标签配置上传参数,如:<controller maxFileSize="10M"/>

 

3、空字段测试

在表单中没有input输入域,jsp脚本接收到的值为nullel表达式接收到的值为空串

如果表单中的值,没有输入,那么jsp脚本和el表达式接收到的值都为空串

4、测试ActionForm类型的自动转换

* boolean:yes,1,on,true都会转换成True类型,而且忽略大小写,其他情况转换成false

* Date类型的转换:

如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,才可以转换

如果是java.util.Date,默认情况下struts无法转换

自定义转换器的实现步骤

实现converter接口,实现convert方法

将实现的conerter注册,通常情况采用servlet注册

采用servlet注册需要注意标签的配置,<load-on-startup>10</load-on-startup>(也可以采用struts plugin注册)

StrutsActionForm的自动搜集过程:

  * 将页面数据放到map中,其中map中的key为页面中的名称,map中的value为页面中的value

  * 调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于ActionForm中的每个属性

    根据类型调用相应的Converter,然后调用相应的convert方法,将相应的字符串转换成ActionForm中指定的类型

    

可以通过BeanUtils.copyProperties(目标对象,源对象)方法进行对象值的复制。

struts标签的配置和使用

配置:

struts-config.xml文件中加入

<message-resources parameter="MessageResources" />

拷贝MessageResources.properties文件到src

使用:

采用taglib指令引入

<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>  

<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic"%> 

40


<action name="UploadAction"

              class="com.chinasoft.action.UploadAction">

             <!--下面的savePath配置可以指定上传文件在项目中的存放路径,可以杜绝在程序中写文件夹得绝对路径  -->

             <param name="savePath">/fileFolder</param>

             <result name="success">/main.jsp</result>

             <result name="input">/upload.jsp</result>

</action>

只要在对应的UploadAction中有一个savePath属性,然后有get、set就可以了。


如下是struts.xml配置文件的细节;

<?xml version="1.0" encoding="gbk" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

<constant name="struts.devMode" value="true" />

    <constant name="struts.i18n.encoding" value="gbk" />

      <constant name="struts.multipart.maxSize" value="3454643645" /><!--struts2文件上传中整个请求内容允许的最大字节数-->

<package name="user" namespace="/user" extends="struts-default">


<action name="RegisterAction"

class="com.chinasoft.action.RegisterAction">

<!--下面的savePath配置可以指定上传文件在项目中的存放路径,可以杜绝在程序中写文件夹得绝对路径  -->

<result name="success">


                        </result>

<result name="input">/register.jsp</result>

</action>

<action name="LoginAction"

class="com.chinasoft.action.LoginAction">

<!--下面的savePath配置可以指定上传文件在项目中的存放路径,可以杜绝在程序中写文件夹得绝对路径  -->

                        <param name="savepath">/uploadfile</param><!--在这里可以给action中的属性赋值-->

                        <result name="success">/login_success.jsp</result>

<result name="input">/login.jsp</result>

</action>

</package>

</struts>  


 在struts的action中:

ActionContext ctx = ActionContext.getContext();

ctx.getApplication().put("app", "application范围");

ctx.getSession().put("sess", "session范围");

ctx.put("req","request范围");



0 0
原创粉丝点击