【问题标题】:JSF templating and controller invocationJSF 模板和控制器调用
【发布时间】:2015-01-29 10:50:02
【问题描述】:

我是 JSF 的新手,我已经阅读了一些规范,但仍有很多东西我不明白。

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

我创建了一个可重用的模板 xhtml,并且我有一个 bean,其中包含模板构建和呈现自身所需的所有数据。 bean 在控制器中被引用。

模板有 2 个参数,controller 和一个字符串值feature,用于生成保存数据的 bean。我做了一些非常丑陋的事情来调用将在控制器上生成 bean 的方法:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 嗨!我希望我的小部件是可扩展的,并允许其他开发人员添加他们自己的嵌套小部件。然后,他们会将 xhtml 的路径放在配置文件中,由控制器读取并提供给 include 标记。有没有更好的方法来实现这一点?

标签: jsf templates dynamic richfaces jsf-1.2


【解决方案1】:

我终于让我的模板工作了。我错了,JSF 和 Facelet 组件不应该调用方法来填充自己。

正确的MVC方式是之前调用控制器的一个方法,控制器会构建视图bean,然后只重定向到JSF视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2018-01-31
    相关资源
    最近更新 更多