与 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。

所以这完全取决于编写代码的要求和级别。