[英]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。 類似的帖子可以幫助您編寫代碼。 鏈接在這里:
好的,根據您的要求,讓我在此處添加一些代碼。 創建此代碼僅出於您理解的目的。 因此,請根據需要進行修改,並隨時進行任何改進。
模型類
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.