Java MVC-如何将数据从视图传递到控制器

Java MVC-如何将数据从视图传递到控制器,java,model-view-controller,view,model,Java,Model View Controller,View,Model,我现在正在学习MVC模式,我有一个关于模型和视图的简短问题。我有以下型号: class Person { private String name; private int age; } 现在,我希望我的视图请求一些输入来创建一个新的人: public void askPerson() { System.out.println("Enter name:"); //read with System.in System.out.println("Enter age:"); /

我现在正在学习MVC模式,我有一个关于模型和视图的简短问题。我有以下型号:

class Person {
  private String name;
  private int age;
}
现在,我希望我的视图请求一些输入来创建一个新的人:

public void askPerson() {
  System.out.println("Enter name:");
  //read with System.in
  System.out.println("Enter age:");
  //read with System.in
}
现在创建此模型的正确方法是什么。我应该:

1) 将用户输入保存在“我的视图”中的变量中,并通过getter在我的控制器中获取它们,以便在控制器中创建模型(getName()、getAge())或

2) 我应该在视图中创建模型并作为askPerson()的结果返回它吗

通常,将此类数据从视图传递到控制器的最佳方式是什么


谢谢大家!

创建bean对象,填充它并将其从视图发送到控制器。类似的帖子可以帮助您编写代码。以下是链接:

好的,根据你的要求,让我在这里输入一些代码。此代码仅为您理解的目的而创建。因此,根据您的需要进行修改,并随时进行任何改进

模型类

class MyModel {
      private String name;
      private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "MyModel [name=" + name + ", age=" + age + "]";
    }


}
class MyController {

    public void processRequest(MyModel model) {

        /**
         * Inspect the model and process it as per your need.
         */
    }
}
查看类

class MyModel {
      private String name;
      private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "MyModel [name=" + name + ", age=" + age + "]";
    }


}
class MyController {

    public void processRequest(MyModel model) {

        /**
         * Inspect the model and process it as per your need.
         */
    }
}
类MyView{

/**
 * Create view elements, take user inputs and  
 * set the in the model object. Finally send it
 * to the controller for processing
 */


private void onSomeViewEvent(Object myevent) {
    MyModel model = new MyModel();

    // take the properties from event and set in model
    model.setAge(25);
    model.setName("Yourname");

    // send to controller
    MyController controller = new MyController();
    controller.processRequest(model);
}
}

控制器类

class MyModel {
      private String name;
      private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "MyModel [name=" + name + ", age=" + age + "]";
    }


}
class MyController {

    public void processRequest(MyModel model) {

        /**
         * Inspect the model and process it as per your need.
         */
    }
}

最干净的方法是让控制器监听视图。反过来,视图可以告诉控制器需要发生什么事情

简言之,归结起来就是这样。

在本例中,我们假设控制器已作为观察者添加到视图中

将通知其观察者(控制器)的视图


这里的主要好处是,控制器对视图的实现一无所知,反之亦然。使它们松散耦合且可互换。这是MVC的全部目的。

您不需要指定您正在使用的框架。尝试阅读SpringMVC或JSF教程。没有框架,只有模型、视图和控制器的三个包。您能为我的示例提供一个小代码片段以更好地理解吗?非常感谢。谢谢你,但不幸的是,我不明白这应该如何运作。我是否应该为每个模型创建一个视图,并将整个视图对象返回控制器?@freakout Updated resolution以帮助您获得一些示例代码。谢谢,因此在视图中创建模型对象似乎是可以的。我有点担心,在这种情况下,视图与模型紧密相连。模型用于传递信息。这没有问题。您没有在视图中放置任何由控制器处理的处理逻辑。因此,所有层都在发挥作用。如果需要,可以创建不同的类来传输信息,也可以创建不同的类来保存信息。但一切都取决于需要。@Bart谢谢你!这种模式很容易理解,而且似乎效果很好。但是,在本例中,如果您想删除一个人,您将如何实现另一个函数?view方法获取人员的ArrayList,并应告知控制器要删除的人员。在给定的示例中,您将如何实现此场景?@freakout我知道此实现具有仅触发
update
方法的限制。如果您需要更复杂的东西,可以添加更好的事件处理。我将把这部分留给你,因为它与MVC无关,如果你尝试自己解决它,你将学到更多。如果您发现自己在实施过程中遇到困难,您可以再次提出一个问题。这里有一篇文章可以让你走。