与 JavaFX 控制器相比,如何在 Spring MVC 中正确定义控制器
How to properly define a Controller in Spring MVC compared to a JavaFX Controller
我很难理解 JavaFX 控制器和 Spring MVC 控制器之间的区别。我来自 JavaFX 背景,我看到 Spring MVC 控制器与 JavaFX 控制器之间的许多差异,我目前正在使用 Spring MVC。
它们之间有重要的区别,例如,在 JavaFX 中,每个 fxml 视图都有自己的控制器,例如LoginViewController.java 与 loginview.fxml、RegisterViewController.java 和 registerview.fxml。
这是JavaFX中一个简单的待办事项列表的代码,在我的问题中更清楚:
ToDoListViewController.java:
public class ToDoListViewController {
// private properties tied to the fxml view via @FXML annotation
private List<TodoItem> todoItems;
@FXML
private ListView<TodoItem> todoListView;
@FXML
private TextArea itemDetailsTextArea;
// ...
public void initialize() {
// code to initialize stuff
// ...
}
@FXML
public void showUpdateItemDialog() {
//get the item to be updated
// do stuff to update item
// ....
}
}
这个控制器绑定到 todolistview.fxml,我认为这很简单。
现在在 Spring 中,我看到一些控制器由视图定向,而另一些则由路由定向,这让我有点困惑。我见过这样的控制器:
HomeController.java:(面向视图)
@Controller
public class HomeController {
@RequestMapping("/")
public String showPage() {
return "main-menu";
}
}
CustomerController.java:(路由导向)
@Controller
@RequestMapping("/customer")
public class CustomerController {
private CustomerDAO customerDAO;
public CustomerController(CustomerDAO customerDAO) {
this.customerDAO = customerDAO;
}
@RequestMapping("/list")
public String listCustomers(Model theModel) {
// get the customers from the dao
// add the customers to the model
return "list-customers";
}
@RequestMapping("/add")
public String addCustomer() {
// return the jsp view to add a new customer
return "customer-form";
}
// same goes for get by id, update and delete
//...
}
理解这些差异的最佳方式是什么?在 Spring MVC 中使用哪种方法?面向视图,面向路线?感谢阅读!
面向路由是在 spring MVC 中处理端点的好方法。这种方式让我们的代码看起来很好看,我们的代码看起来更有条理也更容易理解。面向路由的方式还提供了额外的规则,例如参数过滤器和内容类型。
这一切都取决于要求,
例如:
在你的情况下,
如果你想直接访问任何东西,(如主页)你可以选择面向视图的。
如果您想要像 CUSTOMERS 这样的访问权限,那么在您的情况下,
您可以使用视图方向,例如,为了查看客户,您可以只使用“/customerList”创建一个方法,您还将获得所需的结果,但每次对于客户,您都需要为所有内容执行此操作,
相反,你可以做的是
使用路由映射,因为(客户)功能在创建时建立了路由,因此您可以使用路由映射,就像第二个示例中的 post 一样,
在这种情况下,所有带有“/customer”的请求都将到达那里,然后将到达您想要的确切方法(已写在方法的映射中)。有利于结束映射,可以用来传递需要的参数id。
所以这完全取决于编写代码的要求和级别。
我很难理解 JavaFX 控制器和 Spring MVC 控制器之间的区别。我来自 JavaFX 背景,我看到 Spring MVC 控制器与 JavaFX 控制器之间的许多差异,我目前正在使用 Spring MVC。 它们之间有重要的区别,例如,在 JavaFX 中,每个 fxml 视图都有自己的控制器,例如LoginViewController.java 与 loginview.fxml、RegisterViewController.java 和 registerview.fxml。
这是JavaFX中一个简单的待办事项列表的代码,在我的问题中更清楚:
ToDoListViewController.java:
public class ToDoListViewController {
// private properties tied to the fxml view via @FXML annotation
private List<TodoItem> todoItems;
@FXML
private ListView<TodoItem> todoListView;
@FXML
private TextArea itemDetailsTextArea;
// ...
public void initialize() {
// code to initialize stuff
// ...
}
@FXML
public void showUpdateItemDialog() {
//get the item to be updated
// do stuff to update item
// ....
}
}
这个控制器绑定到 todolistview.fxml,我认为这很简单。
现在在 Spring 中,我看到一些控制器由视图定向,而另一些则由路由定向,这让我有点困惑。我见过这样的控制器:
HomeController.java:(面向视图)
@Controller
public class HomeController {
@RequestMapping("/")
public String showPage() {
return "main-menu";
}
}
CustomerController.java:(路由导向)
@Controller
@RequestMapping("/customer")
public class CustomerController {
private CustomerDAO customerDAO;
public CustomerController(CustomerDAO customerDAO) {
this.customerDAO = customerDAO;
}
@RequestMapping("/list")
public String listCustomers(Model theModel) {
// get the customers from the dao
// add the customers to the model
return "list-customers";
}
@RequestMapping("/add")
public String addCustomer() {
// return the jsp view to add a new customer
return "customer-form";
}
// same goes for get by id, update and delete
//...
}
理解这些差异的最佳方式是什么?在 Spring MVC 中使用哪种方法?面向视图,面向路线?感谢阅读!
面向路由是在 spring MVC 中处理端点的好方法。这种方式让我们的代码看起来很好看,我们的代码看起来更有条理也更容易理解。面向路由的方式还提供了额外的规则,例如参数过滤器和内容类型。
这一切都取决于要求, 例如:
在你的情况下, 如果你想直接访问任何东西,(如主页)你可以选择面向视图的。
如果您想要像 CUSTOMERS 这样的访问权限,那么在您的情况下, 您可以使用视图方向,例如,为了查看客户,您可以只使用“/customerList”创建一个方法,您还将获得所需的结果,但每次对于客户,您都需要为所有内容执行此操作, 相反,你可以做的是 使用路由映射,因为(客户)功能在创建时建立了路由,因此您可以使用路由映射,就像第二个示例中的 post 一样, 在这种情况下,所有带有“/customer”的请求都将到达那里,然后将到达您想要的确切方法(已写在方法的映射中)。有利于结束映射,可以用来传递需要的参数id。
所以这完全取决于编写代码的要求和级别。