0

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

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

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

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

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

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

4

3 回答 3

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",我相信您已经拥有了。

于 2010-02-17T22:45:54.453 回答
0

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

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

于 2009-06-08T06:00:45.480 回答
0

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

于 2009-06-08T15:17:44.310 回答