Struts学习03

来源:互联网 发布:淘宝茶具套装 编辑:程序博客网 时间:2024/06/08 05:21

1,OgnlContext:

root:任意对象(setRoot)

Context:map(setValues)

---------------------------------------------------------------------------------------------------------------

2,语法:以下oc为OgnlContext

取值:

            取root对象中name属性:Ognl.getValue("name", oc, oc.getRoot());

            用key(user1)取map中value:Ognl.getValue("#user1", oc,oc.getRoot());

            取map中value对象的成员属性:Ognl.getValue("#user1.name", oc, oc.getRoot());

赋值:

           赋值root对象的name和age属性:Ognl.getValue("name='jerry',age='20'", oc,oc.getRoot());

           赋值map中value对象的成员属性:Ognl.getValue("#user1.name='haha'", oc,oc.getRoot());

方法调用:

                直接调用root对象的方法:Ognl.getValue("getName()+' '+getAge()", oc,oc.getRoot());

                静态方法调用:格式为@类名@静态方法名     Ognl.getValue("@com.cl.ognl.Echo@echo('haha')", oc,oc.getRoot());

创建list/map:

list:花括号表示list,后面可以接方法或指定索引。Ognl.getValue("{'you','me','he'}.size()", oc, oc.getRoot());

map:使用#加花括号里键值对表示,后面可以接方法或指定key。Ognl.getValue("#{'name':'zhangsan','age':18}['name']", oc, oc.getRoot());

--------------------------------------------------------------------------------------------------------------

3,Struts整合Ognl

值栈包括root和Context,root默认放置当前访问的action对象

获得值栈ValueStack:ActionContext.getContext().getValueStack();然后用它将对象压栈。可实现Preparable接口,将这2步操作放在prepare方法里。最好实现ModelDriven接口,它自动处理这2步操作(过滤之前)了。

应用:

参数接收(交给Ognl引擎处理)

配置文件(Ognl表达式)

-------------------------------------------------------------------------------------------------------------------

4,过滤器

先注册拦截器:

<interceptor name="InterceptorDemo" class="拦截器类"></interceptor>

再注册拦截器栈:

<interceptor-stack name="MyStack">
<!-- 引入自定义拦截器 -->
<interceptor-ref name="InterceptorDemo">
<!-- 指定哪些方法不进行拦截,excludeMethods和includeMethods只能用一个 -->
<param name="excludeMethods">方法名,方法名</param>
<!-- <param name="includeMethods">方法名,方法名</param> -->
</interceptor-ref>
<!-- 引用默认拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>

再指定默认拦截器栈:

<default-interceptor-ref name="MyStack"></default-interceptor-ref>

拦截器创建方式:

a:实现Interceptor接口

b:继承AbstractInterceptor类

c:继承MethodFilterInterceptor类(推荐。MethodFilterInterceptor继承了AbstractInterceptor

---------------------------------------------------------------------------------------------------------------

5,标签

导入标签库 <%@ taglib prefix="s" uri="/struts-tags" %>

控制标签:iterator/if/elseif/else

数据标签:property

表单标签:有name和label属性,可以根据name属性自动回显。from/textfield/password/file/radio/checkboxlist/select/textarea/submit

非表单:actionerror