【发布时间】:2021-12-09 21:36:24
【问题描述】:
我很难理解 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 中使用哪种方法?面向视图,面向路由?感谢阅读!
【问题讨论】:
-
不清楚您所说的“按视图定向”或“按路线”是什么意思。 reference documentation 非常清楚提供响应的各种方式。就个人而言,我通常在大多数基于 HTML 的应用程序中最终使用
ModelAndView,但这取决于具体情况。 (旁注:使用 Thymeleaf 而不是 JSP。它更友好。) -
@chrylis-cautiouslyoptimistic- 感谢您的回答!对不起,如果我不清楚!例如,在 Spring MVC 中,第一个控制器 HomeController.java 只是映射主页(main-menu.jsp),就像在 JavaFX 中一样,是一个带有相应控制器的视图。在第二种情况下,它附加到 URI /customer/list,处理不同的视图,如 list-customers.jsp 和 /customer/add,它返回另一个视图 customer-form.jsp。正如我所看到的,它更面向路线,而不是面向视图,我对此感到困惑。对不起,如果我不能更清楚我正在尝试!
-
啊,好吧,在这种情况下:是的,Spring MVC 调度基于路由(特别是 mappings,它还可以包括其他规则,如参数过滤器或内容类型),你告诉它要渲染什么视图。单个控制器根据不同的条件(例如错误)呈现不同的视图是很常见的,因此在您的响应中提供这些说明。
-
非常感谢!这对我帮助很大!现在我更好地理解了这些差异!
-
将 MVC 应用于独立的胖客户端桌面应用程序与将 MVC 应用于 Web 应用程序非常不同,主要是因为 Web 应用程序必须位于 HTTP 请求-响应周期之上.在您对两者都有很多经验之前(当您开始看到它们之间抽象的相似之处时),我建议您将它们视为两个完全不同的想法,并单独学习它们。
标签: java spring spring-mvc javafx model-view-controller