2012-12-28 55 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