首页 > 代码库 > struts.xml文件中action配置、OGNL的投影映射、OGNL表达式的符号

struts.xml文件中action配置、OGNL的投影映射、OGNL表达式的符号


在struts.xml文件中不同的action配置,请求的路径是不一样的
1、请求 path = user!query.action; 配置如下;
<action name="user" class="com.bwf.code.action.UserAction">
<result name="queryUser">/query.jsp</result>
</action>

2、请求path = user.action ; 配置如下:
<action name="user" method="query" class="com.bwf.code.action.UserAction">
<result name="queryUser">/query.jsp</result>
</action>
user.action 因为匹配到struts2的后缀名称,所以struts2会实施拦截, 拦截匹配到path后执行该类的execute方法, 如果明确指明了
具体的方法名,就执行具体的方法;


3、第2步中的弊端在于,该类中一般会有很多个业务处理方法,不同的方法都需要配置一个action标签;

如下面这个例子,新增和查询需写两个标签;
<action name="user" method="query" class="com.bwf.code.action.UserAction">
<result name="queryUser">/query.jsp</result>
</action>
<action name="user2" method="add" class="com.bwf.code.action.UserAction">
<result name="queryUser">/query.jsp</result>
</action>

有没有一个办法,一个类只写一个action标签,然后该类中的所有业务处理方法,都共享该类的配置关系; 通配;

4、 每个类只需要写一个action标签,然后对该类中的方法名称进行通配;
<action name="user_*" method="{1}" class="com.bwf.code.action.UserAction">
<result name="queryUser">/query.jsp</result>
</action>

5、对所有类,所有方法进行通配(先暂时别用,先用第四个的通配)
<action name="*_*" method="{1}" class="com.bwf.code.action.{2}Action">
</action>



OGNL的投影映射
判断user属性存在某一个字符串的条件: <s:iterator var="x" value="http://www.mamicode.com/#attr.userList.{?#this.getUser().indexOf(‘a‘)!=-1}">
判断user属性以某一个字符开头: <s:iterator var="x" value="http://www.mamicode.com/#attr.userList.{?#this.getUser().startsWith(‘sh‘)}">



OGNL表达式的符号: #,$,%。
# 表示上下文作用域; (parameters、reqeust、session、application、attr)
parameters: #parameters.id[0]作用相当于 request.getParameter("id") .
request : #request.userList 作用相当于 request.getAttribute("userList");
session : #session.userList 作用相当于 session.getAttribute("userList");
application : #application.userList 作用相当于 application.getAttribute("userList");
attr: #attr.userList; 从request,session,application中从小到大的范围查找当前作用对象;

% 主要使用在資源文件中(如國際化、提示信息).
<s:property value="http://www.mamicode.com/%{getText(‘bwf.jsp.query.name‘)}" />
可以在浏览器设置语言中设置不同的语言,即可看到国际化效果;

$ 主要作为传参存在;
<action name="ognl" class="com.lxit.struts.OgnlAction">
<result type="redirect">hello.action?name=${name}</result>
</action>


struts.xml文件中action配置、OGNL的投影映射、OGNL表达式的符号