簡體   English   中英

MVC-如何將數據從視圖傳遞到控制器

[英]MVC - How to pass data from view to controller

我現在正在學習MVC模式,並且對模型和視圖有一個簡短的問題。 我有以下模型:

class Person {
  private String name;
  private int age;
}

現在,我想讓我的視圖請求一些輸入來創建一個新的Person:

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()的結果返回它嗎?

通常,將此類數據從視圖傳遞到控制器的最佳方法是什么?

謝謝!

最干凈的方法是讓控制器在視圖上偵聽。 反過來,視圖可以告訴控制器需要發生的事情。

這是一個可以編譯並運行的功能齊全的示例

簡而言之,可以歸結為這一點。

在此示例中,我們假定控制器已作為觀察者添加到視圖中。

將通知其觀察者(控制器)的視圖。

class CreatePersonView extends Observable implements View {
    public void display() {
        System.out.println("\nWelcome to the create person view!");
        System.out.println("----------------------------------");

        System.out.print("Name: ");
        String name = System.console().readLine().trim();

        System.out.print("Age: ");     
        int age = Integer.valueOf(System.console().readLine().trim());

        Map<String, Object> data = new HashMap<String, Object>();

        data.put("name", name);
        data.put("age", age);

        // generate the event
        setChanged();
        notifyObservers(data);
    }
}

將消耗事件的控制器。

class Controller implements Observer {

    PersonService service;

    public void setPersonService(PersonService service) {
        this.service = service;
    }

    // simplified version
    public void update(Observable sender, Object arg) {
        Map data = (Map)arg;
        Person p = service.create((String)data.get("name"), (Integer)data.get("age"));

        //debug
        System.out.println("Created new person: " + p);
    }
}

這里的主要好處是,控制器對視圖的實現一無所知,反之亦然。 使它們松散耦合和可互換。 這就是MVC的全部目的

創建您的bean對象,填充它並將其從View發送到Controller。 類似的帖子可以幫助您編寫代碼。 鏈接在這里:

MVC從View向Controller發送數據

好的,根據您的要求,讓我在此處添加一些代碼。 創建此代碼僅出於您理解的目的。 因此,請根據需要進行修改,並隨時進行任何改進。

模型類

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 + "]";
    }


}

查看課程

類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 MyController {

    public void processRequest(MyModel model) {

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM