2010-09-10 59 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。 這樣我可以保持界面,但我必須做一點點的綁定工作。