gpt4 book ai didi

jsf - f :setPropertyActionListener not invoked

转载 作者:行者123 更新时间:2023-12-04 18:48:09 25 4
gpt4 key购买 nike

我正在尝试移动 p:dialogh:form ,因为我已经读到这是首选方式(但是我想了解原因,因为我在 p:dialog 中的 form 在我的应用程序中运行良好)。

唯一的困难是对话框标题需要动态更新。当 p:dataTable 中的按钮时显示该对话框被点击。

这是我的旧 xhtml(更改前),它工作正常:

<p:dataTable var="event" value="#{eventBean.lazyModel}" selection="#{eventBean.selectedEvent}" />
...
<p:column headerText="#{msgs.Persons}">
<p:commandButton value="#{msgs.ViewPersons}" update=":viewPersonsForm" oncomplete="viewPersonsDlg.show()">
<f:setPropertyActionListener value="#{event}" target="#{eventBean.selectedEvent}" />
</p:commandButton>
</p:column>
</p:dataTable>
<h:form id="viewPersonsForm">
<p:dialog modal="true" widgetVar="viewPersonsDlg" dynamic="true" header="#{eventBean.selectedEvent.name}" >
...
</p:dialog>
</h:form>

这是新的 xhtml,带有未调用的 eventBean#setSelectedEvent()。
<p:dataTable var="event" value="#{eventBean.lazyModel}" selection="#{eventBean.selectedEvent}" />
...
<p:column headerText="#{msgs.Persons}">
<p:commandButton value="#{msgs.ViewPersons}" update=":viewPersonsDlgId" oncomplete="jQuery('#viewPersonsDlgId .ui-dialog-title').text('#{eventBean.selectedEvent.name}');viewPersonsDlg.show()">
<f:setPropertyActionListener value="#{event}" target="#{eventBean.selectedEvent}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:dialog modal="true" id="viewPersonsDlgId" widgetVar="viewPersonsDlg" dynamic="true" >
...
</p:dialog>

那么,为什么在第二种情况下 eventBean#setSelectedEvent() 没有被调用?并且,如果可能的话,为什么第一种情况不是最佳的?

最佳答案

不限于使用 p:dialog里面h:form因为它在某些情况下可以工作,但大多数时候你会发现自己在一些意想不到的行为中挣扎,这里有一些解释:

Why not to place p:dialog inside h:form 1

Why not to place p:dialog inside h:form 2

您的情况的问题在于 oncomplete 中的 jQuery 方法在使用 f:setPropertyActionListener 设置值之前调用.为避免这种情况,请使用与您在第一个案例中使用的解决方案相同的解决方案。所以 :

<p:dataTable var="event" value="#{eventBean.lazyModel}" selection="#{eventBean.selectedEvent}" />
...
<p:column headerText="#{msgs.Persons}">
<p:commandButton value="#{msgs.ViewPersons}" update=":viewPersonsDlgId" oncomplete="viewPersonsDlg.show()">
<f:setPropertyActionListener value="#{event}" target="#{eventBean.selectedEvent}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:dialog modal="true" id="viewPersonsDlgId" widgetVar="viewPersonsDlg" dynamic="true" header="#{eventBean.selectedEvent.name}" >
...
</p:dialog>

这里不需要使用jQuery。

关于jsf - f :setPropertyActionListener not invoked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10624994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com