Tag: model view controller

在MVC模型中存储什么以及组件如何通信?

我以前在Java中创建了一些GUI应用程序,每次我真的只是乱搞,直到事情做我想做的事情,使用我在网上找到的几个GUI示例的snippit。 最近我在阅读更多关于使用Swing在Java中编写GUI时的良好实践时,我仍然不清楚。 让我先描述一下我在下一个项目中想要做什么,以便我们可以将其作为一个例子: 我想创建一个可执行应用程序,使用户能够加载图像,对这些图像执行某些操作并保存项目。 核心应该有一个主图像查看器,下面有一个简单的导航器,可以在加载的图像之间切换。 应该有带按钮的面板对图像执行操作(例如按钮’从图像中选择背景颜色’),这些操作应该可以从工具栏或菜单中访问。 我知道,例如,GUI应该从Event Dispatch Thread启动,并且我可以使用SwingWorker进行耗时的操作。 我还了解到,通过使用Actions,我可以将function与state分开,并为面板按钮,工具栏按钮和菜单项创建一个Action。 我不明白的是所有这些事情是如何相互沟通的,以及我把它放在哪里。 例如:我是否在一个单独的模型中维护我的程序状态(当前显示哪个图像,设置了什么设置),并在我的主窗口类中引用该模型? 那控制器怎么样? 我是否一直参考控制器中的模型? 当我对图像进行一些计算时,是否使用简单的重绘更新控制器中的gui图像或gui本身的图像? 我想我遇到的主要问题是我真的不明白如何让程序的不同部分进行通信。 GUI由许多部分组成,然后有所有这些动作和监听器,模型,控制器,以及所有这些都需要以某种方式进行交互。 我不断添加对所有这些对象中几乎所有内容的引用,但它使一切都非常混乱。 我在网上找到的另一个例子是: http : //www.devdaily.com/java/java-action-abstractaction-actionlistener 我理解这是如何工作的,我不明白的是如何真正改变“本来会做’切’动作。” 进入实际的切割动作。 假设它涉及在观察者中切割出我的图像中的一部分,我是否已将图像传递给动作? 如果这个过程需要很长时间,我是否会在动作中创建一个新的SwingWorker? 然后我如何让SwingWorker在计算时更新GUI? 我是否会将GUI的引用传递给SwingWorker,以便它可以不时更新它? 有没有人有一个如何做到这一点的好例子,或者可能有一些关于如何正确学习这个的技巧,因为我有点亏本。 有太多的信息和许多不同的方法,我真的想学习如何使用干净的代码创建可伸缩的应用程序。 是否有一个很好的开源项目没有太多的代码,非常好地演示了我所描述的GUI,以便我可以从中学习?

在业务逻辑和数据层看似重叠时分解的最佳设计?

我正在构建一个MVC Web应用程序(使用Spring MVC框架),我对设计特定区域的最佳方式感到有点困惑。 应用程序必须与一系列Web服务进行交互,这些Web服务并非真正设计得非常完美,并且本身并不提供很多抽象 – 基本上每个创建/更新/检索/删除操作都有一个Web服务方法。每个“数据类型”,除此之外没有太多的API。 Web服务客户端需要知道要调用哪些方法,以及能够以何种顺序创建所需的数据 – 换句话说,没有基于“事务”的方法。 例如,只需创建一个新的用户帐户,就需要调用总共七种不同的Web服务方法来设置必要表中的所有记录( user记录,为该用户添加正确的privileges ,设置用户的billing明细等)。 我正在努力解决这个问题的最佳方法并将其封装在我们的应用程序中。 大多数应用程序遵循标准流程: request —> Controller Service/Business-level object DAOs for data access 在我的应用程序中,我使用自己的一组“域对象”来表示和抽象Web服务WSDL中定义的数据类型,这样我的域逻辑就不依赖于Web服务类型,因此我们可以抽象和隐藏我们喜欢哪个细节。 我正在寻找一些意见是设计上面提到的“用户创建过程”的最佳方式。 创建“常规用户”的过程涉及调用七种不同的Web服务,正如我所提到的,但这只是用户的一种“类型” – 我们必须能够创建几种不同类型的用户,每种用户都需要不同的要调用的Web服务。 目前我只是设计了这个“常规用户”创建,作为一个概念certificate – 我有一个域对象User ,一个UserDao接口,它有getUser(name)和createUser(User) ,以及一个WebServiceUserDao ,实现UserDao方法并知道如何调用上述七种Web服务方法。 createUser()方法由UserCreationService调用, UserCreationService是我的业务/服务级别类,而后者又由SignupController调用。 但是要扩展这个逻辑以便能够创建不同的用户类型(由User.getType()的不同值表示,我不确定在业务/服务层类和DAO之间绘制线的位置。例如,我应该: 每个“用户类型”创建一个UserDao实现,因此创建每个“用户类型”的逻辑可以封装在它自己的类中,让UserCreationService决定使用哪个UserDao ? 这将对应于1个服务类:许多DAO。 我是否应该将UserDao分解为更小的部分,一个对应于需要在Web服务/ DB中创建的每个“记录”,即使我的整个应用程序不需要知道这些单独类型中的每一个? 然后为各种不同的“用户类型”提供不同的UserCreationService实现? 换句话说,即使我不需要相应的Privilege或BillingPlan域对象,此策略也会有PrivilegesDao , BillingPlanDao等。 这将是许多服务类:许多DAO。 包含在单个WebServiceUserDao为每个“用户类型”调用Web服务的所有逻辑? 这将有一个非常复杂的类的缺点(PMD已经在抱怨圈复杂度),但所有这些逻辑都将封装在一个类中,从整体API角度来看可能会减少复杂性。 我对此应用程序的一个目标是确保如果我们必须更改数据持久性的细节,我们需要做的就是更改DAO实现 – 如果我们必须开始与不同的计费系统连接,除了在DAO级别,我不希望应用程序的任何部分发生更改。 任何意见? 在决定何时分解“业务逻辑”与“数据访问逻辑”时,您使用什么样的策略?

MVC – 控制器类教程

我正在寻找一本教程/书籍,指导我理解Controll函数和编写我自己的控制器+模型的最佳实践 提前致谢。

JavaFX + Hibernate(JPA)持久性+ Derby DB

我正在开发一个Java桌面应用程序,并且对使用JavaFX非常感兴趣。 我打算使用MVC架构,因为我有一些Java EE和MVC模型的经验。 我想将数据存储在嵌入式derby数据库中并使用Hibernate作为持久层,但我找不到一个关于用hibernate和JavaFX实现MVC的好教程。 我已经创建了持久性文件,但我不确定如何使它与JavaFX一起使用。 在Java EE中,我注入EJB服务或DAO,但由于我的应用程序不是服务器连接,我想我不能这样做。 有人可以解释我如何实现这一目标吗? 可以一起使用它们吗?

ViewResolver使用Java注释

在Spring 3.1.1中是否可以使用Java注释配置视图解析器? 我已经完成了使用Java注释的所有配置,但我被卡在视图解析器中 。 码 package com; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import com.*; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.UrlBasedViewResolver; import org.springframework.web.servlet.view.JstlView; @Configuration @ComponentScan(“com”) public class AppConfig { { //Other bean declarations } @Bean public UrlBasedViewResolver urlBasedViewResolver() { UrlBasedViewResolver res = new InternalResourceViewResolver(); res.setViewClass(JstlView.class); res.setPrefix(“/WEB-INF/”); res.setSuffix(“.jsp”); return res; } } […]

在JSP中,如何使用JSTL检查请求中是否存在某个会话属性?

这是servlet中的代码: HttpSession session = request.getSession(true); session.setAttribute(“user”, user); 我正在转发请求到JSP,我想检查是否附加了会话范围的用户参数。 / /message

何时使用Servlet或@Controller

我需要清理一些事情。 我一直在寻找这个问题的答案,但我似乎无法找到我的具体问题的好答案(例如,这个问题正在蚕食答案: servlet和Web服务之间的区别 )。 根据我的理解,有一些不同的方法可以在“面向MVC”的Web应用程序中实现“请求处理”,即“控制器”,其中两个是: Java特定的Servlet (例如,您通过单击new – > Servlet创建的,例如在eclipse中),用作“Controller”。 这个扩展了HttpServlet ,你使用像doGet和doPost等方法。 Spring MVC注释了@Controller类(是的,使用DispatcherServlet )。 有了这个,你可以使用@RequestMethod GET / POST等。 现在我的问题…… 你什么时候使用其中一个? 使用一种方法比另一种方法有任何一般优势吗? (比如,一般推荐一种方法吗?) [编辑] :强调关键字

Spring MVC既不是BindingResult也不是普通的目标

java.lang.IllegalStateException:BindingResult和bean名称’user’的普通目标对象都不可用作请求属性所以当我试图运行这个网页时我得到了这个错误,我不知道为什么。 我看到并阅读了很多关于这个错误,但我不知道是什么问题。 web.xml中: onallo_labor welcome.jsp servlet_1 org.springframework.web.servlet.DispatcherServlet 1 servlet_1 *.html contextConfigLocation /WEB-INF/servlet_1-servlet.xml org.springframework.web.context.ContextLoaderListener servlet_1-servlet.xml中: CreateController: 包onallo_labor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.portlet.ModelAndView; @Controller public class CreateController { @RequestMapping(value=”create”,method=RequestMethod.GET) public ModelAndView create(){ return new ModelAndView(“create”,”user”,new User()); } @RequestMapping(value=””,method=RequestMethod.GET) public ModelAndView welcome(){ return new ModelAndView(“welcome”); } @RequestMapping(value=”create_ready”,method=RequestMethod.POST) public String addContact(@ModelAttribute(“user”) User […]

使用JSP(JSTL)从Java MVC和JDBC检索数据

我是Servlets和MVC网络编程的新手。 到目前为止,我已经开发了一个基本的CRUD项目,并希望添加一个搜索function。 我想使用JSP文件与servlet进行通信并使用标记(我在编写问题时遇到问题,但我希望下面的代码能够清除它)。 我DAO的一部分 public List getAllCourses() { // TODO Auto-generated method stub List courseList = new ArrayList(); try { Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery( “select * from courses” ); while( resultSet.next() ) { Courses course = new Courses(); course.setCourseid( resultSet.getInt( “courseid” ) ); course.setCoursename( resultSet.getString( “coursename” ) ); course.setFaculty( resultSet.getString( “faculty” […]

如何从值堆栈中删除操作?

我正在尝试让我的动作课单身。 关键是要在MVC模式中使动作类成为真正的控制器。 特别是在实现REST控制器时,控制器的范围可以扩展到应用程序的生命周期。 与Spring框架一样,默认情况下控制器被置于默认范围内,Spring中的默认范围是单例。 Struts2也有一个默认范围,它也是单例。 我想将我的动作类放到这个范围,并从值栈中删除它们。 我如何修改Struts2框架以使我的操作像Spring中的控制器一样? 我知道我可以将操作类的管理委托给Spring,但是我不能使用默认范围,并且Struts2容器仍在继续运行。 我无法从框架中删除它,因为它不可插拔。 所以,捎带Spring和Struts2容器我无法使我的动作类单例,因为Struts2实例化它们并放入值栈。 这是我的问题:如果我选择Struts和Spring之间的容器将我的动作类放到默认范围,我怎么能告诉Struts2框架不要把它们放到值栈?