【问题标题】:In a MVC architecture, can the `View` access the model?在 MVC 架构中,`View` 可以访问模型吗?
【发布时间】:2013-12-20 12:50:38
【问题描述】:

我必须用 MVC 模式建立一个网站。

我有一个“showuser.jsp”视图,我可以访问模型 (DAO) 以获取所有用户,

或者我的控制器应该将此信息传递给我的视图?

【问题讨论】:

  • 您使用的是哪个框架?不要重新发明轮子。
  • 我的控制器应该将此信息传递给我的视图 是的,这就是 MVC 的目的。你的视图应该只知道控制器,它应该与模型和其他人协调。
  • @Santosh 标记了它,Hibernate
  • 有可能,但是MVC模式的意义是什么?没有。
  • @user1798362,hibernate 是 ORM 工具。很可能它会被Service 抽象出来。我期待一些 MVC 框架,如 struts 或 spring-mvc。顺便说一句,请查看我对您的查询的回答。

标签: java hibernate model-view-controller


【解决方案1】:

一个典型的MVC流程序列如下

  1. User 发送页面查看请求
  2. Controller收到请求
  3. ControllerModel 查询数据
  4. Modelreturns 数据(你的情况下的用户列表
  5. Controller 将此数据传递给选定的View (showuser.jsp)(通常作为请求/会话属性
  6. View 被渲染并返回给用户。

下图很好地描述了这一点:

我希望这能回答您的问题。

【讨论】:

  • 很好的答案!但是:如果用户向视图发送请求,控制器如何接收它?
  • 您总是请求View,但只是这样,请求 URL 被映射到 Controller,因此它总是首先接收请求。 Controller知道将哪个视图发送给客户端。因此,一旦从模型中获取数据,它就会设置数据并将请求转发到配置的View
【解决方案2】:

通常控制器为视图(JSP)填充模型。

你的控制器应该调用 DAO(如果你有实现所有业务逻辑的服务层,那就更好了。然后控制器调用可能有一个或模式 DAO 的服务)。并将信息存储在模型中以在jsp上表示。

【讨论】:

  • 信息应该如何从控制器传递到视图?
  • 只需要在控制器的方法中包含Model参数,并将数据存储在模型中即可。
【解决方案3】:

这应该是无缝的。视图不应该知道模型本身,但它应该通过控制器传递,Spring MVC 中的一种常见技术是通过控制器传递休眠对象,然后将其转换为 JSON。

View 会渲染这个 JSON 对象并对其进行适当的解析。在您的示例中,您的控制器可以将用户对象列表传递给视图,如果它是 JSON 对象数组,您可以对其进行解析。

您的视图应该调用一个控制器,该控制器将返回来自 DAO 或服务层的响应(取决于您的业务逻辑要求)。

【讨论】:

    【解决方案4】:

    在 MVC 模式中,modelview 不应该相互感知。 modelviewcontroller 绑定在一起。所以controller 应该将model 传递给view

    简单来说就是代码:

    class View{}
    
    class Model{}
    
    class Controller{
        View view = new View();
        Model model = new Model();
    
        public void controllerMethod(){
            //pass model to view
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2012-10-13
      • 1970-01-01
      • 2011-10-22
      相关资源
      最近更新 更多