struts.xml不自动提示

1.         struts.xml不自动提示

a)         window – preferences – 搜索 catalog – add

b)         选择key type为URI

c)         key: http://struts.apache.org/dtds/struts-2.0.dtd

d)         location: 对应的dtd文件,位于struts-core包中,解压开,指定相应位置,如:D:\share\0750_Struts2.1.6\soft\struts-2.1.6\lib\struts2-core-2.1.6\struts-2.0.dtd

2.         导入示例项目

a)         注意JDK的版本,应该是JDK6,否则会出class version的问题

b)         如果总是项目出问题,可以重建项目,单独拷文件

c)         还有一种情况是项目右键,properties – java – compiler 选择6.0

d)         另外,在tomcat配置中也要使用jdk6

3.         devMode设为true就会出问题空指针问题

a)         tomcat路径带了空格

4.         在使用ActionContext.getContext().get(“request”)取不到对象,为null值

a)         web.xml不要使用2.0的filter,用新的

5.         在action的试验中,遇到一个奇怪的bug

a)         用default-action-ref指定一个action

b)         用*_*映射

c)         在地址栏中访问一个不存在的action,如adfsdfsfs

d)         结果居然会映射到*_*上

e)         如果换成*__*就没问题了

f)          靠,只能认为是bug

g)         下次用*-*,不用*_*

 

 

Action

1.         实现一个Action的最常用方式:从ActionSupport继承

2.         DMI动态方法调用 !

3.         通配符配置 * {1} {2} …

a)         *_*

4.         接收参数的方法(一般用属性或者DomainModel来接收)

5.         简单参数验证addFieldError

a)         一般不使用Struts2的UI标签

6.         访问Web元素

a)         Map类型

                         i.              IoC

                       ii.              依赖Struts2

b)         原始类型

                         i.              IoC

                       ii.              依赖Struts2

7.         包含文件配置

8.         默认action处理

Result

1.         常用四种类型:

a)         dispatcher(默认)

b)         redirect

c)         chain

d)         redirectAction

2.         全局结果集

a)         global-results | extends

3.         动态结果(了解)

a)         在action中保存一个属性,存储具体的结果location

4.         传递参数

a)         客户端跳转才需要传递

b)         ${}表达式(不是EL)

OGNL

1.         Object Graph Navigation Language

2.         想初始化domain model,可以自己new,也可以传参数值,但这时候需要保持参数为空的构造方法

3.         其他参考ognl.jsp

4.         什么时候在stack中会有两个Action?chain

Struts-Tags

1.         通用标签:

a)         property

b)         set

                         i.              默认为action scope,会将值放入request和ActionContext中

                       ii.              page、request、session、application

c)         bean

d)         include(对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)

e)         param

f)          debug

2.         控制标签

a)         if elseif else

b)         iterator

                         i.              collections map enumeration iterator array

c)         subset

3.         UI标签

a)         theme

                         i.              simple xhtml(默认) css_xhtml ajax

4.         AJAX标签

a)         补充

5.         $ # %的区别

a)         $用于i18n和struts配置文件

b)         #取得ActionContext的值

c)         %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用

                         i.              参考<s:property 和 <s:include

定义自己的theme

1.         css(覆盖struts2原来的css)

2.         覆盖单个文件

3.         定义自己的theme

4.         实战:

a)         把所有主题定义为simple

b)         fielderror特殊处理

c)         自己控制其他标签的展现

 

声明式异常处理

1.         在Actoin中进行异常映射

2.         在package中进行全局异常映射

3.         使用继承共用异常映射

4.         Struts2中异常处理由拦截器实现(观察struts-default.xml)

a)         实际上Struts2的大多数功能都由拦截器实现

I18N

1.         I18N原理

a)         ResourceBundle和Locale的概念

b)         资源文件

c)         native2ascii

2.         Struts的资源文件

a)         Action – Package – App级

b)         一般只用APP

                         i.              struts.xml custom.i18n

c)         PropertiesEditor插件

                         i.              解压

                       ii.              features plugin 覆盖到myeclipse中的eclipse目录里

d)         动态语言切换

                         i.              request_locale=en_US

Struts拦截器以及源码解析

1.         Struts架构图

a)         见文档

2.         Struts执行过程分析

3.         Interceptor拦截器过程模拟

4.         定义自己的拦截器

a)         acegi – spring security

5.         使用token拦截器控制重复提交(很少用)

6.         类型转换

a)         默认转换

                         i.              日期处理

b)         写自己的转换器:

public class MyPointConverter extends DefaultTypeConverter{

 

    @Override

    public Object convertValue(Object value, Class toType) {

       if(toType == Point.class) {

           Point p = new Point();

           String[] strs = (String[])value;

           String[] xy = strs[0].split(",");

           p.x = Integer.parseInt(xy[0]);

           p.y = Integer.parseInt(xy[1]);

           return p;

       }

       if(toType == String.class) {

           return value.toString();

       }

       return super.convertValue(value, toType);

    }

 

}

public class MyPointConverter extends StrutsTypeConverter{

 

 

 

    @Override

    public Object convertFromString(Map context, String[] values, Class toClass) {

      

           Point p = new Point();

           String[] strs = (String[])values;

           String[] xy = strs[0].split(",");

           p.x = Integer.parseInt(xy[0]);

           p.y = Integer.parseInt(xy[1]);

           return p;

      

      

    }

 

    @Override

    public String convertToString(Map context, Object o) {

       // TODO Auto-generated method stub

       return o.toString();

    }

 

}

 

c)   三种注册方式:

        i.      局部:XXXAction-conversion.properties

1.   p(属性名称) = converter

       ii.      全局:xwork-conversion.properties

1.   com.xxx.XXX(类名)= converter

     iii.      Annotation

d)   如果遇到非常麻烦的映射转换

        i.      request.setAttribute();

       ii.      session

posted on 2014-04-16 20:53  IT民工yxw  阅读(302)  评论(0编辑  收藏  举报