当前位置:编程学习 > JAVA >>

动态方法、通配符、常量

1.通配符
1)Execute方法的弊端
假设有这样的需求:
A.    有一个action为PersonAction。
B.    在PersonAction中要实现增、删、改、查四个方法。
C.    但是在action中方法的入口只有一个execute方法
D.    所以要想完成这样的功能,有一种方法就是在url链接中加参数。
那么在action中的代码可能是这样的:
PatternAction
public class PatternAction extends ActionSupport{
       private String method;
       public String execute(){
              if(method.equals("add")){
                     //增加操作
              }else if(method.equals("update")){
                     //修改操作
              }else if(method.equals("delete")){
                     //删除操作
              }else{
                     //查询操作
              }
              return "";
       }
}
       可以看出这样写结构并不是很好。而通配符的出现解决了这个问题。
Pattern.jsp
访问PersonAction的add方法:<br>
<a href="${pageContext.request.contextPath}/pattern/patternAction.action">测试</a><br>
Struts-pattern.xml
<package name="pattern" namespace="/pattern"
              extends="struts-default">
              <action name="patternAction" method="add"
                     class="cn.itcast.struts2.action.pattern.PatternAction">
              </action>
</package>
PatternAction
public String add(){
              return "add";
}
2) method属性
 
Pattern.jsp
访问PersonAction的add方法:<br>
<a href="${pageContext.request.contextPath}/pattern/patternAction.action">测试</a><br>
Struts-pattern.xml
<package name="pattern" namespace="/pattern"
              extends="struts-default">
              <action name="patternAction" method="add"
                     class="cn.itcast.struts2.action.pattern.PatternAction">
              </action>
</package>
PatternAction
public String add(){
              return "add";
}
 说明:从上述代码可以看出只要配置文件中的method属性的值和方法名称一样就可以了。但是这种写法有弊端。如果aciton中需要5个方法。则在struts的配置文件中需要写5个配置,这样会导致配置文件的篇幅很大。而且重复性也很大
 
3) 动态调用方法
在url中通过action名称!方法名称可以动态调用方法。
Pattern.jsp
动态调用PatternAction中的add方法:<br>
<a
       href="${pageContext.request.contextPath}/pattern/patternAction!add.action">测试</a>
struts-pattern.xml
<action name="patternAction"
       class="cn.itcast.struts2.action.pattern.PatternAction">
</action>
说明:这样的情况在配置文件中不需要method属性
 
4) 通配符映射
需求:a_add.action、b_add.action、c_add.action全部请求PatternAction的add方法
Pattern.jsp
通配符映射实例1:<br>
<a href="${pageContext.request.contextPath}/pattern/a_add.action">测试</a>
<a href="${pageContext.request.contextPath}/pattern/b_add.action">测试</a>
<a href="${pageContext.request.contextPath}/pattern/c_add.action">测试</a>
说明:不管是a_add还是b_add还是c_add的路径都指向PatternAction的add方法。
struts-pattern.xml
<action name="a_add" method="add"
       class="cn.itcast.struts2.action.pattern.PatternAction">
</action>
<action name="b_add" method="add"
       class="cn.itcast.struts2.action.pattern.PatternAction">
</action>
<action name="c_add" method="add"
       class="cn.itcast.struts2.action.pattern.PatternAction">
</action>
上述结构是很差的,经过改进如下:
<action name="*_add" method="add"
       class="cn.itcast.struts2.action.pattern.PatternAction">
(1)、 映射一
请求PersonAction和StudentAction的add方法
Pattern.jsp
通配符映射实例2:
<br>
<a
       href="${pageContext.request.contextPath}/pattern/personAction_add.action">请求personAction的add方法</a>
<a
       href="${pageContext.request.contextPath}/pattern/studentAction_add.action">请求studentAction的add方法</a>
(2)、映射二
 
Struts-pattern.xml
<action name="personAction_add" method="add" class="cn.itcast.struts2.action.pattern.PersonAction"></action>
<action name="studentAction_add" method="add" class="cn.itcast.struts2.action.pattern.StudentAction"></action>
改进如下:
<action name=”*_add” method=”add” class=” cn.itcast.struts2.action.pattern.{1}”/>
说明:*和{1}是相对应的关系。
 
 
需求:在TeacherAction中有增、删、改、查的方法。这个时候配置文件怎么写比较简单?
Pattern.jsp
通配符映射实例3:
<a
       href="${pageContext.request.contextPath}/pattern/PersonAction_add.action">请求teacherAction的add方法</a>
<a
       href="${pageContext.request.contextPath}/pattern/StudentAction_update.action">请求teacherAction的update方法</a>
<a
       href="${pageContext.request.contextPath}/pattern/StudentAction_delete.action">请求teacherAction的delete方法</a>
<a
       href="${pageContext.request.contextPath}/pattern/StudentAction_query.action">请求teacherAction的query方法</a>
struts-pattern.xml
<action name="teacherAction_*" met
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,