spring中delegate的使用

 在实际使用的时候,MultiActionController的使用不是在<<spring in action>>中介绍的那种方法(会spring的都应该知道那本书吧^V^),转而是使用delegate.
其实delegate的使用和书中介绍的方法差不多,下面就来介绍它的使用,一个很入门的例子:
首先在你的spring的配制文件里(例如example-servlet.xml里)写入如下代码
 <bean id="taskInstanceController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
  <property name="methodNameResolver">
   <ref bean="methodNameResolver" />
  </property>
  <property name="delegate">
   <ref bean="taskInstanceDelegate" />
  </property>
 </bean>
 <bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  <property name="paramName">
   <value>action</value>
  </property>
 </bean>
 <bean id="taskInstanceDelegate" class="com.aceway.adf.workflow.web.TaskInstanceDelegate">
  <property name="adminServices">
   <ref bean="jbpmAdminServices" />
  </property>
 </bean>
在这里对于methodNameResolver不熟的朋友可以去查一下资料
TaskInstanceDelegate.java的代码如下:

public class TaskInstanceDelegate {
 protected AdminServices adminServices;

 public AdminServices getAdminServices() {
  return adminServices;
 }

 public void setAdminServices(AdminServices adminServices) {
  this.adminServices = adminServices;
 }

 public ModelAndView saveAndClose(HttpServletRequest request,
   HttpServletResponse response) {
  Entry entry = null;
  String key = "";
  Map<String, String> taskInstanceVariables = new HashMap();

  String taskInstanceId = request.getParameter("taskInstanceId")
    .toString();
  Enumeration e = request.getParameterNames();
  while (e.hasMoreElements()) {
   key = (String) e.nextElement();
   if (key.startsWith(Global.TASK_INSTANCE_VARIABLE_HEAD)) {
    taskInstanceVariables.put(key, request.getParameter(key)
      .toString());
   }
  }
  String sendResult = adminServices.saveAndClose(Long
    .valueOf(taskInstanceId), null, taskInstanceVariables,
    "default");

  if (sendResult.equals(Global.FALSE))
   return new ModelAndView("error", "error", sendResult);
  else
   return new ModelAndView("info", "info", sendResult);
 }

 public ModelAndView save(HttpServletRequest request,
   HttpServletResponse response) {
  String taskInstanceId = request.getParameter("taskInstanceId")
    .toString();
  String processDefinitionId = request
    .getParameter("processDefinitionId").toString();

  return new ModelAndView("error", "error", taskInstanceId + "--"
    + processDefinitionId);
 }

 public ModelAndView cancel(HttpServletRequest request,
   HttpServletResponse response) {
  String taskInstanceId = request.getParameter("taskInstanceId")
    .toString();
  String processDefinitionId = request
    .getParameter("processDefinitionId").toString();

  return new ModelAndView("error", "error", taskInstanceId + "--"
    + processDefinitionId);
 }

}
在这里注意的地方的是方法里的参数是(HttpServletRequest request, HttpServletResponse response),记住一定得是这个参数,不然不能正确的找到相应的方法
下面就是相应的.jsp代码了
 <form method="post" action="taskInstance.htm">
 名称: <input type="text" name="v_name" value="${taskInstanceVariable.variable['v_name']}">
 <br>
 数量: <input type="text" name="v_item" value="${taskInstanceVariable.variable['v_item']}">
 <br>
 <input type="hidden" name="taskInstanceId" value="${taskInstanceVariable.taskInstanceId}">
 <input type="hidden" name="processDefinitionId" value="${taskInstanceVariable.processDefinitionId}">
 <input type="hidden" name="action" id="action">
 <input type="submit" value="保存并关闭" οnclick='document.forms[0].elements["action"].value="saveAndClose"'><br>
 <input type="submit" value="保存" οnclick='document.forms[0].elements["action"].value="save"'>&nbsp;&nbsp;
 <input type="submit" value="取消" οnclick='document.forms[0].elements["action"].value="cancel"'><br>
 <input type="submit" width="100px" value="重新分配" οnclick='document.forms[0].elements["action"].value="getActorsName"'>
</form>
这里注意的是<input type="hidden" name="action" id="action">,它的name是action这是和在上面配制文件里methodNameResolver里的paraName的value值是一样的.
还一个要注意的地方,在onclick事件为action付一个值是delegate方法的名字,注意一定得一样哦,包括大小写.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架,有许多常用的设计模式。以下是其的一些设计模式: 1. 单例模式(Singleton Pattern):Spring使用单例模式来管理Beans,默认情况下,Spring容器Bean都是单例的。 2. 工厂模式(Factory Pattern):Spring使用工厂模式来创建和管理Beans。通过配置文件或注解来指定Bean的创建和初始化过程。 3. 代理模式(Proxy Pattern):Spring使用代理模式来实现AOP(面向切面编程)。通过代理对象来增强目标对象的功能。 4. 观察者模式(Observer Pattern):Spring使用观察者模式来实现事件驱动的编程方式。通过事件监听器和发布者来实现消息的传递和处理。 5. 适配器模式(Adapter Pattern):Spring使用适配器模式来实现各种不同接口之间的兼容和转换。 6. 模板模式(Template Pattern):Spring使用模板模式来简化开发流程。通过定义一个抽象模板类,将一些通用的操作和流程封装起来,具体实现由子类完成。 7. 委托模式(Delegate Pattern):Spring使用委托模式来实现任务的分发和调度。通过委托对象来完成具体的任务。 8. 装饰器模式(Decorator Pattern):Spring使用装饰器模式来扩展对象的功能。通过装饰器对象来动态地给目标对象添加新的行为。 9. 依赖注入模式(Dependency Injection Pattern):Spring的核心特性之一就是依赖注入,它使用了依赖注入模式来管理和组装对象之间的依赖关系。 这些设计模式在Spring起到了重要的作用,帮助开发者更好地设计和组织代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值