【问题标题】:PrimeFaces f:setPropertyAction with dataTable works only after a row is selectedPrimeFaces f:setPropertyAction 与 dataTable 仅在选择一行后才有效
【发布时间】:2012-10-30 13:05:43
【问题描述】:

这是我的问题:

  • 支持 bean 是 @SessionScoped
  • 我有一个 p:dataTable,其中 selectionMode 设置为单一,selection #{bean.selectedCar}
  • 表中的第一列是一个commandLink,它更新一个对话框:detailDialog,oncomplete显示对话框并有一个actionListener清除 bean 中的一些属性
  • f:setPropertyListener 具有值 #{item} 和目标 #{bean.selectedCar}

我希望用户能够单击链接,并且对话框将显示该行上对象的信息,但它仅在首先选择 dataTable 中的一行时才有效。如果没有选择行并且用户点击了 commandLink NULL 被传递给bean.selectedCar 并且页面挂起。

作为一种解决方法,我希望至少能够预先选择 dataTable 中的第一行,并希望这可以解决问题。

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    您可以在命令链接中重复使用您的f:setPropertyListener

    <p:commandLink value="show" 
                   actionListener="#{bean.doSomething}" 
                   oncomplete="dialog.show()">
        <f:setPropertyListener value="#{item}" target="#{bean.selectedCar}"/>
    </p:commandLink>
    

    或者(因为我们正在遍历数据表)您可以将当前的#{item} 对象传递给您的&lt;p:commandLink.../&gt;

    <p:commandLink value="Show" 
                   action="#{bean.selectThisCar(item)}" 
                   oncomplete="dialog.show()"/>
    

    【讨论】:

      【解决方案2】:

      感谢@akoskm 的回答。第一个变体是我用于按钮的变体。我的问题是(作为第二个选项)此方法与 dataTable 中的选择选项冲突。从p:dateTable 参数中删除selection="#{bean.selectedCar}" 是对我问题的解决。感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 2015-03-23
        • 2012-06-29
        • 2013-10-29
        • 1970-01-01
        • 2013-08-05
        • 1970-01-01
        相关资源
        最近更新 更多