struts2 备忘

1.只要validate()里fieldError和actionError里有东西,验证就不能通过。

2.局部类型转换,可以编写转换类,继承ognl里的DefaultTypeConverter类,重写public Object convertValue(Map context, Object value, Class toType) 方法,进行类型转换,须编写与XXAction类名字一致的XXAction-conversion.properties文件,并与之放于一起。文件里 说明对哪个属性进行转换,如:point=com.test.converter.PointConverter。

3.全局类型转换,可对同一类型的属性进行统一配置,只需在struts.xml同目录下建立配置文件xwork- conversion.properties(文件名固定)。文件里说明要转换的属性类型,如:
com.test.bean.Point=com.test.converter.PointConverter。

4.可以继承org.apache.struts2.util.StrutsTypeConverter类,它提供了更好的类型转换方法,只需重写 其中的两个方法。

5.全局信息替换,遇到类型转换错误的时候(也就是说不进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到 fieldError中。如果要替换该信息,可以编写国际化资源文件,在struts.xml中加入<constant name="struts.custom.i18n.resources" value="message"/>,其中value为自定义的资源文件的名字(message.properties),添加信息 xwork.default.invalid.fieldvalue={0} error,其中key是固定的,{}里为表单自动填充的field

6.局部信息替换,与5类似,如果要替换信息,可以编写局部国际化资源文件,文件名要与被验证的Action类一致,并位于相同包下,如 XXAction.java对应XXAction.properties。添加信息invalid.fieldvalue.XXX=XXXc(提示信 息),左边为属性名,右边为错误提示信息。

7.先进行类型转换,再进行输入较验。

8. 类型转换与输入校验的流程
A. 首先Struts2对客户端传来的数据进行类型转换
B. 类型转换完毕后再进行输入校验
C. 如果类型转换和输入校验没有错误发生,那么进入execute方法(调用商业逻辑)
   注意:如果类型转换不成功,也同样要进行输入校验

9. 当form的theme属性定义为simple时,表单的内容仍会保存。

10. 当strsut.xml里定义了自定义的method,则程序执行method里定义的方法,不会执行原来的execute()方法。

11. 先执行自定义的validateXxx()方法,之后一定会执行原来的validate()方法,可以不重写validate()方法,但如果仍需执行原 来的exectue()方法,可以提供executeValidate()方法。

12. 验证框架validation,定义的验证文件须与被验证的Action文件同名,且必须以-validation结尾,并放于同一凶下,如有 LoginAction.java,则有LoginAction-validation.xml。验证文件的dtd:<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd ">

13. 验证框架的错误信息放于fieldError里

14. 局部验证框架,为自定义的方法编写相应的验证文件,LoginAction.java里有test()方法,则文件为LoginAction-test- validation.xml,但是全局的验证文件仍会先执行,可以不提供全局验证文件。

15. 如果没有手工添加拦截器,struts2则调用默认的拦截器,相反,struts2将不提供默认的拦截器,可以自已添加进 去<interceptor-ref name="defaultStack"></interceptor-ref>(在struts-default.xml里可以查 看)。

16. 拦截器实现方法,实现Interceptor接口,或继承AbstrcatInterceptor抽象类(这样就可以不用重写init()和 destroy()方法),反正没什么用。

17. 方法拦截器,继承MethodFilterInterceptor类,可以实现对指定的方法进行拦截,配置如:<interceptor-ref name="myInterceptor3"><param name="includeMethods">reg,exectue</param></interceptor-ref& gt;,用参数includeMethods、excludeMethods指定或排除相应的拦截方法,其中includeMethods比 excludeMethods优先级高,配置时最好不要配置为全局拦截器,配置在相应的action下就行了。

18. 继承com.opensymphony.xwork2.interceptor.PreResultListener类,实现struts2的监听器,可 以在拦截器中的ActionInvocation调用addPreResultListener()方法注册监听器,监听器将会在页面返回之前执行。

19. struts2中的session是一个Map对象,可能通过ActionContext.getContext().getSession()取得,在 拦截器里也可通过ActionInvocation对象.getInvocationContext().getSession()取得。

20. 配置参考,struts2核心包里有sturst2-default.xml,xwork包里有xwork- default.xml,com.opensymphony.xwork2.validator.validators包里有default.xml(验 证框架的验证器说明)。

22.可以用ServletActionContext.getRequest()得到request对象。

23. 用strut2上传文件时,可在Acton里加入对应的属性XXFileName,XXContentType通过它可得到文件的名字,表单对应的 Action中的文件域属性应为File类型,可通过它得到一个输入流。

24. 在org.apache.struts2包里有default.properties配置文件。

25. 用strut2上传多个文件时,只需在Action里将相应的属性设置为集合或数组类型,而且页面的文件域名字得相同。

26. 可以使用struts2自已实现的fileUpload拦截器,限制文件上传大小和类型,只需单独在相应的Action里配置这个拦截器的参数,因为 struts2默认的拦截器栈里不可以对它进行参数配置(局部配置拦截器时就得加上默认的拦截栈),参数maximumSize为单个文件大小,参数 allowedTypes为允许的文件类型(具体的文件类型可以参见tomcat下的conf目录下的web.xml),可以在 org.apache.struts2.interceptor.FileUploadInterceptor文件里查看到相关参数,当上传文件受限制 时,struts2将自动转到input里的页面,所以记得在action里配置input。

27. 文件上传错误的信息保存在fielderror里,在页面可以取出,可以自己配置全局资源文件,覆盖struts2默认的错误信息提示(可以在 org.apache.struts2包里的struts-messages.properties文件里查看相关配置信息)。

28. 使用struts2下载文件,写一个action,里面写一个返回输入流的方法,如:
public InputStream getDownloadFile(){
   return ServletActionContext.getServletContext().getResourceAsStream("/upload /0806.mp3");},Action的配置如:
<action name="download" class="com.test.action.DownloadAction">
    <result name="success" type="stream">
     <param name="contentType">audio/x-mpeg</param>
     <param name="contentDisposition">filename="0806.mp3"</param>
     <param name="inputName">downloadFile</param>
    </result>
   </action>
相关内容可以参照org.apache.struts2.dispatcher.StreamResult类,其中downloadFile为get方法 的名字,filename="XX"为固定。

29. struts2国际化,在src下加入相应的国际化资源文件,以XXX_zh_CN.properties等结尾,在actionerror或 fielderror里可通过ActionSurpport类的getText(String key)方法取得。

30. 在验证框架文件的message标签里加上key属性,文件将读取相应的值。

31. 可以定义包级别或类级别的局部资源文件,命名分别为package_zh_CN.properties(package是不变 的),XXX_zh_CN.properties,并放于相应的包下。

32. 可以定义一个临时的资源文件,在页面用<s:i18n name="basename(文件名前缀)"><s:text name="XX"></s:i18n></s:i18n>读取。

33. 表单域也可以国际化,只要去掉label属性,再加上key属性读取相应的即可,表单必须theme属性不能是simple.

34. 可以编写struts.properties配置文件,并放在classpath路径下(src),里面的设置将覆盖struts2默认的 default.properties文件里面的相应设置,作用与在strust.xml里面的contant标签效果一样。

35. 在struts.xml里的package可以配置namespace属性,这样在表单的action就得加上相应的namespace前缀。

36. 模型驱动模式,创建相应的bean类,在相应的Action里就不用写相应的属性,但Action必须实现ModelDriven接口,其它与属性驱动模 式一样。

37. Action类可以实现Preparable接口,实现它的prepare()方法,该方法最先被执行。

38. 获取单个fielderror:<s:fielderror>
   <s:param>username</s:param>
</s:fielderror>

39. 防止表单重复提交拦截器token,但没在defaultStack里,须手工配置到action里,当表单重复提交时,系统会自动转到token定义的 invalid.token里,所以需要在action里配置相应的result标签,而且系统会自动将错误信息放到actionerror 里,struts.messages.invalid.token=The form has already been processed or no token was supplied, please try again.可以自己更改国际化资源文件。

40. 获取HttpServletRequest、HttpServletResponse对象的方法3:HttpServletRequest对象的 setAttribute和getAttribute相当于ActionContext对象的put和get方法,可通过 ActionContext.getContext()静态方法获得一个ActionContext对象。

41. 获取HttpServletRequest、HttpServletResponse对象的方法1:让action继承 ServletRequestAware、ServletResponseAware接口,定义相应的HttpServletRequest、 HttpServletResponse属性,然后在复写的方法里为它们赋值(该方法由容器自动注入调用),如:
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
   this.request.=request;
}

42. 获取HttpServletRequest、HttpServletResponse对象的方法2:直接从用ServletActionContext的 静态方法getRequest()、getResponse()获得。

43. 动态方法调用的另外方式,提供相应的与execute类似的方法,如有hello方法,则页面里 action="login!hello.action",感叹号前面为action名,后面为方法名,struts.xml里无须配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值