notes

Action

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

2.         DMI动态方法调用

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

a)         *_*

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

5.         简单参数验证addFieldError

a)         一般不使用Struts2UI标签

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

  <li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
  <li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
  <li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
  <li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
  <li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
  <li>访问值栈中action的普通方法:<s:property value="m()" /></li>
  <hr />
  <li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
  <li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
  <li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
  <hr />
  <li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
  <hr />
  <li>访问List:<s:property value="users"/></li>
  <li>访问List中某个元素:<s:property value="users[1]"/></li>
  <li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
  <li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
  <li>访问Set:<s:property value="dogs"/></li>
  <li>访问Set中某个元素:<s:property value="dogs[1]"/></li>
  <li>访问Map:<s:property value="dogMap"/></li>
  <li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
  <li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
  <li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
  <li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
  <hr />
  <li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li>
  <li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>
  <li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>
  <li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
  <hr />
  <li>[]:<s:property value="[0].username"/></li>

 

 

Struts-Tags

1.         通用标签:

a)         property

b)         set

                         i.              默认为action scope,会将值放入requestActionContext

                       ii.              pagerequestsessionapplication

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)         $用于i18nstruts配置文件

b)         #取得ActionContext的值

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

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

声明式异常处理

1.         Actoin中进行异常映射

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

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

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

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

I18N

1.         I18N原理

a)         ResourceBundleLocale的概念

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值