2010-09-10 88 views
1

我正在学习SpringMVC 2,我有一个窗体,我需要绑定到一个对象(命令)。但是如果我需要这个命令对象作为接口,那么我可以使用不同的对象实现(当然所有的实现都会有相同的字段)。SpringMVC窗体绑定到命令对象这是接口

对于绑定表示帐户的表单我有这个控制器。 是否有可能将表单绑定到帐户接口,所以我可以使用它之后像一个业务bean?

或者只是告诉我什么是像一个流动的最佳春天做法: 表 - >业务逻辑 - >保存到数据库

public class OpenAccountControllerSpring2 
extends SimpleFormController { 

private ClientDao clientDao; 
private Account account; 

public OpenAccountControllerSpring2() { 
    setCommandClass(// dont know what to write here); 
    setCommandName("newAccount"); 


} 


protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, 
     Object command, BindException bindExp) 
    throws Exception { 
    try { 
        //here i just want to create a new Account, add it to a Client (Interface), then transform the Client into a database-bean and save it. 

     int client_id = Integer.parseInt(request.getParameter("clientId")); 
     Account account = (Account) command; 
     Client client = Transformer.toBusinessHeavy(clientDao.getClient(client_id)); 
     client.addAccount(account); 
     clientDao.updateClient(Transformer.toEntity(client)); 
    } catch (Exception err) { 
     return new ModelAndView(this.getFormView()); 
    } 

    return new ModelAndView(this.getSuccessView()); 
} 

public void setClientDao(ClientDao dao) { 
    this.clientDao = dao; 
} 


public void setAccount(Account account) { 
    this.account = account; 
} 

}

回答

0

你为什么要学习的Spring MVC 2 (其中大部分已被弃用),而不是Spring MVC 3?新的注释驱动控制器是更容易使用,并允许更多的灵活性,你写你的控制器。

如果你对Spring MVC 3感兴趣,here是我写的一系列可能有用的例子。

+0

我想学习2和3.目前我认为2更多地用于生产 – Blitzkr1eg 2010-09-10 22:07:02

2

你绝对应该跳过Spring 2 MVC并直接去Spring 3 MVC。这是一个重大的演进式飞跃,将为您节省很多麻烦。然而,你仍然会遇到同样的问题,试图做你想做的事情。 Spring必须能够实例化表单命令对象,就像它在获取的异常中所说的那样。就像它说的那样,它不能实例化一个接口。你将不得不尝试一种不同的方法,这可能会涉及到更多的工作,而且Spring MVC的帮助也会减少。您可以直接使用请求参数值并且不使用命令对象。您将不得不手动将参数绑定到正确的子类实​​例。或者,您也可以尝试为您的子类使用非抽象基类。这样你可以指定该类作为命令对象,并且Spring可以实例化它并将值绑定到它。你可以通过建立一个单独的类来模拟你的表单并且不在你现有的类层次结构中来做类似的事情。不过,你必须把它翻译成你的课程。你可能还想检查你的对象模型,并确保你真的正确地建模。一般来说,如果你做的东西质朴,标准的工具不支持你可能会陷入糟糕的territoy。

0

我已经做了它通过使用一个接口,注入它的实现和实现formBackingObject(),我从请求中获取信息,并调用接口上各自的setters。 这样我可以保持界面,但我必须做一点点的绑定工作。