struts2入门3

来源:互联网 发布:js鼠标悬停事件 编辑:程序博客网 时间:2024/06/05 08:47

1.文件上传:    浏览器三要素,  服务器端: commons-fileupload.jar  fileuploadinterceptor拦截器

   1.  继承模型驱动类, 创建 file, contenttype , filename, 成员属性, 在execute方法内将文件copy就可上传.


   2.命名规范:  file 属性命名: jsp页面name,  jsp name+Contenttype ,  jsp name+FileName ; 这里name自定义的


   3.为以上属性提供get,set方法.
    在方法内, io工具类:fileutiles.copyfile(upload,new file(servletcontext.getrealpath(/upload));
 

   4.注意事项: 文件上传有限制大小,在default.properties中,有一个struts.multipart.maxsize=2M;

      1.在struts2  中配置常量,改变值就可以了.这是对整个工程设置


      2. 针对某个action设置 在action下,设置拦截器标签<interceptor-ref name="fileUpload">
          <param name="maximumsize">  <param name="allowedextensions">设置类型, 还要引入默认的拦截器;


      3.上传时如何允许上传多个: 可以在action类中,把三个成员属性设置成集合或数组.在方法内循环数组,完成文件        上传 , 还有就是在jsp中name名称一致;



2. 如果拦截器出现问题,会把错误信息存在action, 然后跳到指定的input视图.可以自定义一个error.jsp,

     然后在struts.xml中配置 result标签的name="input";就会把错误信息显示到.

      将.jsp中两个标签,<s:fielderror> ,<s:actionerror>
       
         <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
          </interceptor-ref>

 

3. json数据格式: 对象和数组可以互相嵌套.

 * 1.fastjson json工具在json和java之间转换,  JSONobjct.toJSONString(对象); JSONArray.toJSONString(集合);

       1. 以上解决日期格式: 注解@JSONField(format="yyyy-mm-dd");  阿里独有的注解

       2. 处理不想要的属性JSONobjct.toJSONString(对象,new propertyfilter(

           重写 apply(要转换成json的对象,属性名称,属性值){
                        if属性名称.equal() return false;
              }));



  2. 另一种jackson 工具类, 导入jar包,new ObjectMapper.writevalueasstring(对象或数组);重载的方法特别多

      mapper.writeValue(ServletActionContext.getResponse().getWriter(), 对象或数组);

     1. 解决日期: mapper.setDateFormat(new Simpledatformat());设置日期格式器;

     2. 过滤属性: 注解@JsonIgnoreproperties({"属性1","属性2"})在类上面;这是使用这个类的全部过滤

         处理一个类的过滤属性 mapper.setfilter(new simplefilterprovider.addfilter(

           注解的自定名 ,simplebeanpropertyfilter.serializeallexcept(不想要的属性1,...)));

           在类上加注解@JsonFilter("自定义名")



4.当出现死循环转换时候, 例如订单关联客户,客户关联订单, 当转客户为json格式时候,

  1.除了fastjson,都会内存溢出;

      如果关闭fastJson,JSON.toJSONString(customer,SerializerFeature.DisableCircularReferenceDetect)  
 
       不想用哪个属性, @JSONField(serialize=false) 在这个属性上面private Customer c;


  2.其他工具内存溢出解决,直接不要那个属性了,加注解@JsonIgnore



5.struts.xml分文件, <include file="..xml"/>



6.struts2处理ajax请求.创建一个result类, 两个属性: 描述是否可用,错误信息; 把result类转换为json

  mapper.writervalue( response.getwriter,result);注意解决乱码;

  js代码中eval("("+data+")")将data转为js对象;括号一定要加;



7. struts2框架的json插件. 导入jar包,将struts.xml <package extends="json-defalut">

     action的返回视图<result type="json"> , struts2框架就会将valuestack的"栈顶"元素转为json格式.

     响应到浏览器,所以不用response转为json了,只需要把集合或对象压入栈顶就可以了.



8.关于响应json的处理,  忽略属性 : 在jsonresult类中有两个属性; includeproperties包含 不包含exclude....

  在struts.xml中 的result标签下,设置root,<param name="root">ps  这样会把ps后面的[]取出来;
  <param name="excludeproperties">\[\d+\]\.属性名    要把[] 转义 所以 \[\]

  javascript:void(0);  相当于#;



9.注解开发;

    导入convention-plugin-2.3.24.jar包, 2.1版本以后才能
    1.在类上面@Namespace("/")  相当于namspace="/"  @parentPackage("struts-defult")

    2.在方法上面@action(value="hello",results={@result(name="" ,type="",location=".jsp")})



10.在类上面:actions: 可以用过多个映射来访问同一个action.  results : 全局返回视图  

     他默认只会扫描包名为action,actions,sturts,staurts2. 类名: Action结尾:

      如果别的名字,就需要在xml中配置常量 name="struts.convention.package.locators"  action.suffix类名

原创粉丝点击