JSF / Facelets针对不同用户的不同视图

时间:2012-11-27 10:59:50

标签: jsf facelets

我必须实现一种基于登录用户加载正确的facelet视图的机制。通过调用服务动态构建视图的根路径,并将其存储在会话中。 此外,视图可以放在war包外的文件夹中。 我的facelet视图我使用占位符'skin-views'来识别将被替换的部分。

例如:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jstl/core"     
template="/facelets/template.xml">

    ...
    <ui:define name="content">
       <ui:include src="skin-views/content.xhtml">
    </ui:define>
    ...

</ui:composition>

在上面的代码段中,页面模板包含在war包中, 而占位符'skin-view'由构建正确查找路径的自定义ResourceResolver取代。

例如:

skin-views => /home/user/skins/customSkin/
skin-views/content.xhtml => /home/user/skins/customSkin/content.xhtml

在web.xml中,我设置了以下参数:

<context-param>
    <param-name>facelets.REFRESH_PERIOD</param-name>
    <param-value>2</param-value>
</context-param>

<context-param>
    <param-name>facelets.VIEW_MAPPINGS</param-name>
    <param-value>*.xhtml</param-value>
</context-param>

<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>false</param-value>
</context-param>

<!-- Added just for removing an annoying error message on startup -->
<context-param>
    <param-name>facelets.RECREATE_VALUE_EXPRESSION_ON_BUILD_BEFORE_RESTORE</param-name>
    <param-value>false</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

总之,我第一次登录视图时正确加载,但是如果我退出并且我使用不同皮肤的其他用户登录,则包含的片段与previuos用户相同。 我想我对facelets缓存机制的理解是错误的。 我用facelets.REFRESH_PERIOD等于0但没有任何改变。

提前感谢您的帮助

0 个答案:

没有答案