【问题标题】:Passing backing bean action to Facelet tag file将支持 bean 操作传递给 Facelet 标记文件
【发布时间】:2016-07-07 07:40:14
【问题描述】:

在我的 JSF 1.2 项目中,我创建了一个 facelet 标记文件并定义了一个具有 actionListener 属性的 inputText,我需要将支持 bean 方法名称传递给该属性。 我尝试在标签文件中定义一个变量 actionListener="#{actionListener}" 。在我调用组件的 xhtml 中,当我将值传递为

actionListener="#{myBean.preFillData}"

标签文件将其视为一个属性,并且错误指示未找到属性“preFillData”。如果我将其更改为

actionListener="#{myBean.preFillData()}"

然后标记文件中存在解析错误,因为它不喜欢括号来指示方法名称。

我们如何将方法名传递给标签文件?

谢谢 时间

【问题讨论】:

    标签: jsf action facelets jsf-1.2 tagfile


    【解决方案1】:

    标签文件不支持传递方法表达式。只有从 JSF 2.0 开始,才有可能使用所谓的复合组件。

    您可以做的是将 bean 引用和方法名称分开,以便您可以使用大括号表示法来调用方法。我只是不确定这是否适用于 actionListener,您通常不会使用它来调用操作,但它肯定适用于 action

    例如

    <my:tag ... bean="#{myBean}" actionMethod="preFillData" />
    

    里面有tag.xhtml

    <h:commandButton ... action="#{bean[actionMethod]}" />
    

    仅当您碰巧在 Facelets 上使用 JSF 2.0 时,您才能使用 &lt;o:methodParam&gt; 将方法表达式传递给标记文件。另见 a.o. Dynamic ui include and commandButton.

    【讨论】:

    • 谢谢@Balusc。很高兴知道 JSF 1.2 的限制和一个升级的理由:)
    • 关于您对通常不用于调用操作的 actionListener 的评论,我有一个案例,其中 2 个文本框的值(邮政编码和扩展名)需要在调用另存为之前合并到我的域对象中的单个属性中我的行动。这种合并是否也应该在 action 方法而不是 actionListener 中完成?
    • 啊,有道理。但是为什么不直接在标签文件中声明呢?它似乎是一个可重用的 ActionListener 实现,不一定需要引用 bean 方法。
    • 很抱歉,当你说“你为什么不直接在标签文件中声明它”时,我没有得到你。能详细点吗?
    • @BalusC 在这个例子中如果beanactionMethod 没有值——空值怎么办?有没有办法在客户端进行分析?
    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多