【问题标题】:Is it possible to call setPropertyActionListener before actionListener是否可以在 actionListener 之前调用 setPropertyActionListener
【发布时间】:2012-12-19 01:24:00
【问题描述】:

我目前遇到 JSF 的执行顺序问题。

查看我的示例代码:

<p:commandButton action="update.xhtml" ajax="false"
                        icon="ui-icon-pencil"
                        actionListener="#{marketingCodeBean.initForUpdate}">
    <f:setPropertyActionListener
        target="#{marketingCodeBean.marketingCode}" value="#{code}"></f:setPropertyActionListener>
</p:commandButton>

我想使用 setPropertyActionListener 设置一个 bean 属性,并对 actionListener=initForUpdate 做一些处理。但是JSF默认的执行顺序是相反的,actionListener在setPropertyActionListener之前。有没有办法解决这个问题?

我正在考虑拥有一个 actionListener 并将 bean 参数传递给它,但我不确定这是否是最好的方法。

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    这确实是预期的行为。动作监听器(actionListener&lt;f:actionListener&gt;&lt;f:setPropertyActionListener&gt;)都按照它们在组件上注册的顺序被调用,首先是 actionListener 属性。除了将actionListener 后面的方法添加为&lt;f:actionListener&gt;(应该引用ActionListener 接口的具体实现类)之外,无法以这种方式更改顺序。

    <p:commandButton ...>
        <f:setPropertyActionListener target="#{marketingCodeBean.marketingCode}" value="#{code}" />
        <f:actionListener type="com.example.InitForUpdate" />
    </p:commandButton>
    

    最好只使用action 而不是actionListener。它在所有动作监听器之后被调用。动作侦听器旨在“准备”一个动作,并将它们用于业务动作实际上是一种糟糕的做法。

    <p:commandButton ... action="#{marketingCodeBean.initForUpdate}">
        <f:setPropertyActionListener target="#{marketingCodeBean.marketingCode}" value="#{code}" />
    </p:commandButton>
    

    public String initForUpdate() {
        // ...
    
        return "update.xhtml";
    }
    

    另见:

    【讨论】:

    • 我也想过 f:actionListener 方法,但觉得这不是我真正需要的。因此,我将按照您的建议使用 actionListener->action 方法。再次感谢您:-)。
    • 我在p:dataTable 中使用action 实现了类似的工作,但f:setPropertyActionListener 始终获取表格第一行的对象数据,即使我单击其他行上的按钮也是如此。如何获取点击行的数据??
    • @Sudeep:您搜索的问题有误。转到stackoverflow.com/q/4994458
    • 在用户Query后使用ajax监听器移除元素,并且在向ui:repeat插入新数据集时再次弹出用户Query,导致移除父容器时不调用setPropertyAL(不确定为什么)如何解决所有这些 JSF 限制?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多