与JavaFX控制器相比,如何在Spring MVC中正确定义控制器



我很难理解JavaFX控制器和Spring MVC控制器之间的区别。我来自JavaFX背景,我已经看到了Spring MVC控制器与JavaFX控制器之间的许多差异,我目前正在使用Spring MVC。它们之间有重要的区别,例如,在JavaFX中,每个fxml视图都有自己的控制器,例如LoginViewController.java with loginview。

registerviewcontroller .fxml、RegisterViewController.java和registerview.fxml.

这是JavaFX中一个简单的ToDo列表的代码,在我的问题中更清楚:

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: (View Oriented)

@Controller
public class HomeController {

@RequestMapping("/")
public String showPage() {
return "main-menu";
}
}

CustomerController.java: (Route Oriented)

@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中使用哪种方法?面向视图,还是面向路由?感谢阅读!

这完全取决于需求,例如:

对你来说,如果你想直接访问任何东西(如主页),你可以使用面向视图的。

如果你想要访问像CUSTOMERS这样的东西,那么在你的例子中,你可以使用视图朝向,例如查看客户你可以用"/customerList&quot创建一个方法;你也会得到所需的结果,但每次对于客户,你都需要这样做,相反,你能做的是使用路由映射,因为(customer)特性通过它的创建建立了一个路由,所以你可以使用路由映射,就像你在第二个例子中看到的那样。在这种情况下,所有的请求都带有"/customer"将到达那里,然后将得到你想要的确切方法(已经写在方法的映射中)。它适用于结束映射,并可用于传递所需的参数id。

所以这完全取决于需求和代码级别。

面向路由是spring MVC中处理端点的好方法。这样我们的代码看起来更有条理,更容易理解。面向路由的方式还提供了额外的规则,如参数过滤器和内容类型。