2009-06-08 64 views
0

我有一个Web应用程序,我需要能够从JSF页面配置部分内容。因此,举例来说,假设我的申请被分成几个小的部分每一个文件夹/文件结构如下图所示:如何创建页内配置。通过c:设置?

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

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

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

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

这个应用程序是用Seam编写的,所以使用Seam中的东西可能是一个选项。

+0

我明白这不是MVC模式的工作方式,而是我把配置放在错误的地方。但不幸的是,我的双手绑在这个上,我只是寻找最简单的方法来做我需要的。 – 2009-06-08 06:28:33

回答

0

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

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

0

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

1

假设你可以使用Facelets,对于C:设置问题:

在模板:

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

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

在这种情况下,用户界面的数值: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。

编辑:

我的但是不是双早检查,因为我非常忙碌,使用浮现在脑海的第一个答案,道歉,我验证了使用交流:在将UI的设置:PARAM会工作同样也使用之前定义的设置。所以,在模板中,你可以不用。这意味着你还必须包含xmlns:c =“http://java.sun.com/jstl/core”,我相信你已经有了。