【问题标题】:How to create in-page configuration. Via c:set?如何创建页内配置。通过 c:set?
【发布时间】:2010-11-01 02:27:16
【问题描述】:

我有一个 Web 应用程序,我需要能够从 JSF 页面配置部分内容。例如,假设我的应用程序被分成几个较小的部分,每个部分的文件夹/文件结构如下:

/partname
    /config
        config.xhtml
    /template
        generaltemplate.xhtml
    search.xhtml
    results.xhtml

Search.xhtml 和 results.xhtml 都使用模板文件 generaltemplate.xhtml。此通用模板包含 config.xhtml 的内容。计划是将所有共享配置放入此页面,以便应用程序可以访问它。但我在执行此操作时遇到了麻烦。

如果我在 config.xhtml 中使用 创建变量,那么它们似乎只能从该配置页面访问。以前我只是将 的范围更改为 request 并且任何问题都会得到解决。但由于 JSF 以不同的方式工作,我知道在这种情况下范围是无用的。

是否有人对我将如何能够在这一页中创建我的所有配置然后能够在我的整个应用程序中访问它有任何建议?

这个应用程序是使用 Seam 编写的,因此可以选择使用 Seam 的一些东西。

【问题讨论】:

  • 我知道这不是 MVC 模式的工作方式,我将配置放在错误的位置。但不幸的是,我的双手被束缚在这个上面,我只是在寻找最简单的方法来做我需要做的事情。

标签: java jsf seam facelets


【解决方案1】:

假设您可以使用 facelets,对于 c:set 问题:

在您的模板中:

...
<html ...
    xmlns:ui="http://java.sun.com/jsf/facelets"
...
<body>
    <ui:param name="testParam" value="Test" />

    <ui:insert name="test">
    </ui:insert>
...

在这种情况下,ui:param 的值可以用作变量,在使用模板的页面中使用。

使用模板的页面:

...
<html ...
    xmlns:ui="http://java.sun.com/jsf/facelets"
...
<body>
<ui:composition template="/WEB-INF/templates/template.xhtml">
    <ui:define name="test">
<h:outputText value="#{testParam}" />
...

话虽如此,我可以想到一些实际应该使用它的实例。除非您束手无策,否则值应该来自应用程序/会话范围的 bean。

编辑:

我很抱歉之前没有仔细检查,因为我非常忙并且使用了想到的第一个答案,但是,我验证了使用 ac:set 代替 ui:param 与使用先前定义的相同设置。因此,在模板中,您可以使用 .这意味着您还必须包含 xmlns:c="http://java.sun.com/jstl/core",我相信您已经拥有了。

【讨论】:

    【解决方案2】:

    Seam 是一个模型-视图-控制器 (MVC) 框架。该视图是使用 JSF 页面实现的。配置是模型的一部分,不应放在页面中。

    为了实现正确的分层,我建议您将配置放在您在 JSF 页面中引用的某种全局可访问的 bean(由 Seam 实例化,可能从 .properties 文件中填充)中。

    【讨论】:

      【解决方案3】:

      我不知道会涉及多少重构,但您可以创建一个适当范围的配置 bean,然后使用 c:set 标记来设置您的配置 bean。然后,稍后在您的页面中,您可以使用配置 bean 而不是直接访问变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        • 2022-08-05
        • 1970-01-01
        • 2020-10-16
        相关资源
        最近更新 更多