JSF模板和控制器调用

时间:2015-01-29 10:50:02

标签: jsf templates dynamic richfaces jsf-1.2

我是JSF的新手,我已经阅读了一些规范,但仍然有许多我不理解的事情。

我加入了一个JSF1.2 + Richfaces 3.3 +一些允许用参数调用方法的EL项目。

我创建了一个可重用的模板xhtml,我有一个bean,它包含模板需要构建和渲染自身的所有数据。 bean在控制器中引用。

模板采用2个参数,控制器和字符串值功能,用于生成保存数据的bean。我做一些非常难看的事情来调用将在控制器上生成bean的方法:

<h:outputText value="#{controller.loadFeature(feature)}" />

然后我使用控制器引用的bean来构建视图

<ui:include src="#{controller.myLoadedBean.widgetPath}">

我在构建时需要这个bean,因为根据数据,我必须包含其他嵌套的xhtml模板。但我不知道如何管理这个:

  • 如果控制器是请求范围的,则调用loadFeature方法太晚,在RENDER_RESPONSE阶段,视图不是使用加载的数据构建的
  • 如果控制器是会话范围的,那么更糟糕的是,在RENDER_RESPONSE中调用了loadFeature方法,所以我第一次尝试加载页面时出现错误,并且页面是用上一个请求的数据。

基本上,我需要的是能够在视图构建时使用模板参数调用控制器的方法。

我不知道如何实现这一目标,或者根本不可能。也许JSF中还有其他一些机制,我不知道允许在构建视图之前/之后调用控制器。

任何帮助将不胜感激,谢谢

1 个答案:

答案 0 :(得分:0)

我终于让我的模板工作了。我错了,JSF和Facelet组件不应该调用方法,这样他们就可以自己填充。

正确的MVC方法是先调用控制器的方法,控制器将构建视图bean,然后只重定向到JSF视图。