【问题标题】:JSF2 button value parameterized?JSF2按钮值参数化?
【发布时间】:2013-07-30 09:21:40
【问题描述】:

使用 JSF2 标记,是否可以将属性参数传递给按钮值?我知道<h:outputFormat> 标签,但我需要它是一个按钮。我对以下内容更感兴趣。

我的 XHTML 代码:

<h:button value="#{webCommonMessages['notifications']}" outcome="...">
    <f:param value="1"/>
</h:button>

我的 webCommonMessages 包:

notifications=Notifications available: ({0})

这当然行不通,但有什么解决方案/解决方法吗?

【问题讨论】:

    标签: jsf-2 properties parameters


    【解决方案1】:

    不幸的是,JSF 没有提供内置功能来获得你想要的东西,所以基本上你有三种方法可以去:

    1. 创建自定义 EL 函数以获取替换值,如 Pass parameters to messages from resource bundle to components other than h:outputFormat 中所述,
    2. 创建一个自定义组件,将替换值导出为 EL 上下文中可见的请求范围变量,如 How to use Parameterized MessageFormat with non-Value attributes of JSF components
    3. 中所暗示的那样
    4. 使用由 BalusC 维护的实用程序库 OmniFaces 中提出的解决方案,按照组件 &lt;o:outputFormat&gt; 有效地结合了第二种方式。

    所以,如果你达到我个人热情推荐的第三种方式,解决方案基本上如下:

    <o:outputFormat value="#{webCommonMessages['notifications']}" var="t">
        <f:param value="1" />
    </o:outputFormat>
    <h:button value="#{t}" outcome="..." />
    

    在 JSF 项目中使用 OmniFaces 非常简单,描述为 on its homepage,但重复一遍:只需将其 jar 添加到 Web 应用程序的 /WEB-INF/lib 文件夹(或将其作为 maven 依赖项包含)并添加在你的 facelet 视图中有一个合适的命名空间,比如xmlns:o="http://omnifaces.org/ui"

    还值得补充的是,我最初的答案是错误的。它错误地假设嵌套 JSF 的 &lt;h:outputFormat&gt; 将呈现必要的 HTML 元素。尽管如此,对于一个普通的导航链接来说也是如此,例如在 JSF 中由 &lt;h:link&gt; 提供,并且可以像这样使用:

    <h:link outcome="...">
        <h:outputFormat value="#{webCommonMessages['notifications']}">
            <f:param value="1" />
        </h:outputFormat>
    </h:link>
    

    您错误地认为嵌套在&lt;h:button&gt; 中的&lt;f:param&gt; 将被合并到来自资源包的消息中。它用于将查询参数附加到生成的 URL。相反,您需要使用 &lt;h:outputFormat&gt; 标记嵌套在您的按钮中,因此,不指定其 value 属性:

    <h:button outcome="...">
        <h:outputFormat value="#{webCommonMessages['notifications']}">
            <f:param value="1" />
        </h:outputFormat>
    </h:button>
    

    【讨论】:

    • 刚刚尝试过,它呈现了空按钮(无值)和来自 outputFormat 旁边的文本消息。我需要的是具有参数化值的按钮。
    • 我将首先使用h:link,但 OmniFaces 看起来很有希望。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2017-02-23
    • 2011-11-10
    相关资源
    最近更新 更多