在JSF2托管bean中实现MVC的最佳实践

时间:2010-11-19 21:24:37

标签: model-view-controller jsf java-ee jsf-2 separation-of-concerns

随着我正在开展的Web项目的复杂性的增加,包含MVC结构的需求变得越来越迫切。我的模型类定义良好,但视图和控制器代码往往会混合在一起。我一直在网站上使用非常繁重的AJAX(主要是RichFaces jsFunctions),这使得事情稍微复杂一些。

有没有人找到使用JSF2实现MVC的好策略?我不想在项目中引入另一个框架(例如Spring MVC)。

到目前为止的一些想法,我还没有开始呢

  • 对于包含重ajax的页面,有一个'view'bean用于记住选定的选项卡,选定的项目,提供过滤的数据列表等...
  • 拥有一个'controller'bean来处理诸如模型更改之类的操作
  • 在JSF页面和控制器之间有'命令'bean。 jsFunction用参数填充命令bean,调用command.execute()会导致命令bean在控制器bean上调用正确的方法来执行操作。 'command'bean可能包含一些在完成时调用的javascript。它还可以指定要重新呈现的页面区域。

有什么想法吗?

修改

我经常看到的是托管bean,它们可以做所有事情:跟踪用户的选择,更新模型,获取过滤后的列表等......

我们目前正在使用JSF 1.2,因此我们不能将actions / actionlisteners与参数一起使用。因此,例如,我们的托管bean包含m_selectedDate等变量,其唯一目的是在调用updateFilteredItemsBasedOnDate()时将所选日期提供给后端。如果额外的变量可以消失,那将是很好的,因为它们只是暂时的。带有参数的JSF 2的EL应该会有所帮助,但我很好奇是否有可用的备用解决方案。

我很好奇是否有办法将MVC应用于托管bean,或者是一种分离关注点的方法,这样我们就不会有大豆试图做所有事情。

3 个答案:

答案 0 :(得分:3)

您在寻找设计模式吗?如果您正在寻找MVC,那么BalusC的答案就足够了,否则请查看

http://www.allapplabs.com/j2ee_design_patterns/j2ee_design_patterns.htm

另请查看this

答案 1 :(得分:1)

好吧,也许您需要的是分层架构。到目前为止,一个MVC架构,还有更多的顾虑。 例如,您可以在View,Business Logic和DataAccess层中对架构进行分层,在每个层中实现大多数公共设计和企业模式。

你已经开始使用其中一个实现MVC,但是,这是一个很好的做法,可以计算“关注点分离”

通过这种方式,您可以实现组织良好且解耦的代码。

我跳过这个简短的解释是有用的。

问候。

答案 2 :(得分:0)

您必须看到管理bean的更好方法,而不是研究如何更好地在JSF中使用MVC。因为JSF本身带有MVC更好的实现。我不确定你究竟是什么意思是实现MVC的更好方法。

正如Balusc在评论中所说,JSF本身为您的应用程序提供了足够的MVC。可能如果你想分开关注点,最好将业务逻辑分成Helper类,只在bean中编写表示逻辑。

关于是将bean用于业务逻辑还是应该将其与托管bean分开,存在争议。这完全取决于您的应用程序和特定领域。

谢谢, 克里希纳