如何创建页内配置。通过c:设置?

时间:2009-06-08 05:37:23

标签: java jsf seam facelets

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

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

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

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

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

此应用程序是使用Seam编写的,因此使用Seam中的某些内容可能是一种选择。

3 个答案:

答案 0 :(得分:1)

假设你可以使用facelets,对于c:set issue:

在你的模板中:

...
<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验证:设置代替ui:param也可以使用之前定义的同样工作建立。因此,在模板中,您可以使用而不是。这意味着您还必须包含xmlns:c =“http://java.sun.com/jstl/core”,我相信您已经拥有。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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