我有一个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中的某些内容可能是一种选择。
答案 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而不是直接访问变量。