【问题标题】:How to conditionally include a file in my template using JSF and Facelets?如何使用 JSF 和 Facelets 有条件地在我的模板中包含文件?
【发布时间】:2012-01-20 20:24:17
【问题描述】:

所以,我的模板包含一个footer.xhtml

<ui:include src="/WEB-INF/testtaker/Footer.xhtml"/>

我想要做的是根据一些用户偏好将页脚更改为不同的Footer_???.xhtml文件。

所以,我想做这样的事情:

<ui:include src="/WEB-INF/testtaker/Footer_001.xhtml">
      Content from original Footer.xhtml
</ui:include>

如果Footer_001.xhtml不存在,则让它使用标签之间的内容,否则使用文件中的内容。

我知道这似乎有点奇怪,但这将解决一个巨大的问题,即自定义我现有的网站,而不必对所有地方的包含进行更改。另外,我不确定该文件是否存在。

有什么想法吗?

【问题讨论】:

    标签: jsf include facelets


    【解决方案1】:

    你可以在&lt;ui:include src&gt;使用EL。

    <ui:include src="/WEB-INF/testtaker/Footer#{user.prefs.footerId}.xhtml" />
    

    如果#{user.prefs.footerId} 返回null 或空字符串,它将变为Footer.xhtml

    【讨论】:

    • 啊,是的。我正计划做类似的事情。但是当 src 解析为 Footer_001.xhtml 之类的文件并且该文件不存在(尚)时,问题就出现了,因此我想包含“默认”Footer.xhtml 的内容。那有意义吗? :)
    • 一开始为什么会有一个无效的页脚 ID?这是 100% 用户控制的输入吗? (如果是这样,您知道这种情况下的攻击媒介吗?)为什么不只为最终用户提供一个包含可用页脚 ID 的下拉菜单?无论如何,如果该页脚存在,您可以检查 prefs 构造函数或 getter 方法。您可以通过检查 ExternalContext#getResource() 是否返回 null 来做到这一点。如果不存在,则返回null
    猜你喜欢
    • 2011-04-01
    • 2012-03-06
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多