2012-12-28 54 views
0

我想在Swing的新項目中使用MVC。MVC驗證數據

但我有一些問題。

在我的MainView我有一個輸入表單和一個提交按鈕。 當我點擊提交時,我的MainController.setUrl(Value)被調用。 然後我必須驗證數據。 我在哪裏必須在我的MainController中驗證這些數據?在我的MainModel? 或在我的MainController我打電話的方法如MainModel.isValidUrl(Value)

如果數據錯誤我想顯示一個對話框給用戶。那麼,如何在視圖中調用方法來顯示此框?

+0

這看起來像jQuery的工作。你有沒有看過在你的項目中使用它? – JOpuckman

+0

我正在使用Java和Swing,而不是JavaScript。此外,我並不真的關心用JavaScript驗證數據;) – guillaume

回答

1

你應該在你的MainController中打電話MainModel.isValid,然後從那裏顯示一個對話框或持續表格(根據是否有效)。 MainModel應該負責自己的驗證。

當您從View實例化您的Controller時,只需將View的實例傳遞給您的Controller即可。

的僞代碼將是這樣的:

... 
// In your view 
private void initTabPane(){ 
    AbstractModel socialModel = new SocialModel(); 

    // Pass the View 
    AbstractController socialController = new MainController(socialModel, this); 
    ... 
} 


// In your controller 
private AbstractView view; 

public MainController(AbstractModel model, AbstracView view) { 
    ... 
    this.view = view; 
} 

public Validate() { 
    if (!model.isValid) { 
     view.showError(); 
    } 
    else { 
     // do your stuff with the valid model 
    } 
} 
+0

所以'MainModel.isValid'不是一個布爾函數,而是一個void no?以及如何使用模式Observer處理通知?我只需通知更改的內容,或通知視圖時,視圖調用模型以查看更改的內容。 – guillaume

+0

它仍然是一個「布爾」。如果它返回'false',那麼你返回到'View'並在那裏設置一個錯誤對話框。或者你可以在你的'Controller'的'View'上調用一個方法,比如'View.showError(「輸入表單無效,請更正錯誤」);'。 – rae1

+0

因此,通過這種方式,我必須將View傳遞給我的控制器,而且我沒有使用Observer模式? – guillaume