对话框取决于dataTable选择

时间:2018-01-12 19:15:52

标签: jsf primefaces datatable render

我有一个列出一堆测试的数据表。我想在用户选择一行后显示一个Primefaces对话框。该对话框引用所选行中的数据,如“#{bean.selectedTest.name}”。但是,首次呈现页面时,没有选择行,并且对所选数据的引用会产生“Target Unreachable,'selectedTest'返回null”(该对话框引用selectedTest.name)。

我不相信这会在Identifying and solving javax.el.PropertyNotFoundException: Target Unreachable解决,否则很棒。

在Primefaces Showcase for DataTable选择中,这是通过使用FacesMessage处理的,FacesMessage是在选择行之后构建的,而不是之前页面中存在的对话框。就我而言,我需要在对话框中进行用户交互。

我尝试将对话框放在primefaces datatable selection issue建议的单独表单中,同样的问题。

我尝试仅在填充selectedTest(render =“#{not empty bean.selectedTest}”)之后在包含引用的对话框内呈现组件,并且在行选择之​​后处理和更新对话框,并且这消除了错误,但重新渲染永远不会发生,对话框弹出空白。我可以在调试器中看到getSelectedTest()在setSelectedTest()之前被调用并返回null。是否有更好的方法来强制重新渲染我错过了?或者这是处理问题的错误方法吗?

我通过设置一个任意测试来解决这个问题,但这似乎是一个丑陋的黑客,因为该行显示为已选中但用户实际上没有选择任何内容。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你是在正确的轨道上:条件渲染是这里的方式。

至于为什么重新渲染没有工作:很可能你试图更新条件渲染的组件本身。这可能是最常见的错误。请参阅explanation

另一种方法是使用{{1}}属性 - 这实际上是一个带条件的条件渲染"在客户端上打开了一个对话框"。