论坛首页 Java版 Spring

MultiActionController绑定command

浏览 6952 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2006-04-06
一般只见到用SimpleFormController绑定command bean。
请问MultiActionController如何绑定command?
谁能给一个例子?
十分感谢!
   
最后更新时间:2006-08-28
   
0 请登录后投票
最后更新时间:2006-04-06
multiactioncontroller可以一个Controller对应多个方法,这样就很方便,但又不能绑定。
commandController又不能对应多个方法。

这是不是要折腾人?
   
0 请登录后投票
最后更新时间:2006-04-06
Spring MVC的MultiActionController比其它框架的DispatchAction之类的都要来得方便。
MultiActionController可以绑定任意的command,举个例子:


[code:1]
public class TestController extends MultiActionController
{
public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse response,Account account)
{
}

public ModelAndView insertProduct(HttpServletRequest request,HttpServletResponse response,Product product)
{
}
     
}

[/code:1]


注意看上面的方法签名,第三个参数就是你要绑定的command,不需要做任何配置,方法签名里第三个参数指定是什么对象,MultiActionController就会给你绑定什么对象。
   
0 请登录后投票
最后更新时间:2006-04-06
谢谢您的提示!我有些不好意思,还是不会。

请问JSP和bean.xml怎么写呢?
或者哪里有这样的例子?

谢谢!
   
0 请登录后投票
最后更新时间:2007-01-30
基本的Spring MVC配置你自己应该会吧?我就说一下MultiActionController的配置吧:
首先在bean.xml里面:

<bean id="methodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  <property name="paramName"><value>method</value>
  </property>
  <property name="defaultMethodName"><value>view</value>
  </property>
</bean>

<bean name="/jsp/test.do" class="org.nightwalker.spaces.web.controller.TestController">
  <property name="methodNameResolver">
    <ref local="methodNameResolver"/>
  </property>
</bean>

配置呢就这么简单。methodNameResolver指定了调用MultiActionController中方法的方式,例如,如果在你的MultiActionController中有如下方法:
public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse,Account account)
{
}

那么要调用这个方法,你的JSP页面的请求URL就应该这样写:
<form action="test.do?method=insertAccount">
</form>

至于绑定什么command和JSP是没有关系的。你在MultiActionController中的方法签名第三个参数是什么对象,Spring就会把request中参数的值绑定到方法签名的第三个对象中。

例子我倒是没有,最直接的办法就是去看一下MultiActionController的源代码,非常简单拉,一看就明白了。
   
0 请登录后投票
最后更新时间:2006-04-06
奥妙就在MultiActionController的invokeNamedMethod方法里,我挖出来简单说一下:

[code:1]

protected final ModelAndView invokeNamedMethod(String methodName, HttpServletRequest request, HttpServletResponse response) throws Exception
{



// If last parameter isn't of HttpSession type, it's a command.
// 在这里,Spring会判断你的请求方法里面第三个参数的类型。如果第三个参数类型不是HttpSession,就认为是要绑定的command。
if (method.getParameterTypes().length >= 3 &&
!method.getParameterTypes()[method.getParameterTypes().length - 1].equals(HttpSession.class))
{
    // 根据类型利用反射产生Command对象
    Object command = newCommandObject(method.getParameterTypes()[method.getParameterTypes().length - 1]);
    params.add(command);
   // 绑定command对象
   bind(request, command);
}


// 最后通过反射去调用你的方法,也就是说,在执行你的方法时,command已
// 经帮你绑定好拉,你直接用就可以了。
return (ModelAndView) method.invoke(this.delegate, params.toArray(new Object[params.size()]));
}

[/code:1]
   
0 请登录后投票
最后更新时间:2006-04-06
谢谢!搞定了。:)
   
0 请登录后投票
最后更新时间:2006-04-07
   
0 请登录后投票
最后更新时间:2006-04-06
不过在他的源码里有说明 -“--靠第3个参数来绑定比较缺乏灵活性,还是建议你调用它的bind()函数来绑定”。

当然,如果没有要特殊处理的属性,比如Book的Category属性,CoverImage属性,也没啥校验,可以简单的用第三个参数来绑定,又少了一行代码,善哉善哉。
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐