JSF2按钮值参数化了吗?

时间:2013-07-30 09:39:57

标签: jsf-2 properties parameters

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

我的XHTML代码:

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

我的webCommonMessages包:

notifications=Notifications available: ({0})

这当然不起作用,但有没有解决方法/解决方法呢?

1 个答案:

答案 0 :(得分:2)

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

  1. 创建自定义EL函数以获取替换值,如Pass parameters to messages from resource bundle to components other than h:outputFormat
  2. 中所述
  3. 创建一个自定义组件,将替换值导出为EL上下文中可见的请求范围变量,如How to use Parameterized MessageFormat with non-Value attributes of JSF components
  4. 中所示
  5. 根据组件OmniFaces使用BalusC维护的实用程序库<o:outputFormat>中提出的解决方案,该组件本身就是第二种方式。
  6. 所以,如果你达到第三种方式,我个人热烈推荐,解决方案基本如下:

    <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的<h:outputFormat>将呈现必要的HTML元素。但是,对于简单的导航链接来说,如JSF中提供的那样,例如<h:link>,并且可以像以下一样使用:

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

    您错误地认为嵌套在<f:param>中的<h:button>将从资源包中合并到您的邮件中。它用于将查询参数附加到生成的URL。相反,您需要将<h:outputFormat>标记用于嵌套在按钮中的目的,因此,不要指定其value属性:

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