PrimeFaces f:带有dataTable的setPropertyAction仅在选择了一行后才有效

时间:2012-10-30 13:05:43

标签: jsf-2 primefaces

这是我的问题:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

或者(因为我们正在遍历dataTable)您可以将当前#{item}对象传递给<p:commandLink.../>

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

答案 1 :(得分:1)

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