我想要做的是像Primefaces展示的基本行选择示例(http://www.primefaces.org/showcase/ui/datatableRowSelectionByColumn.jsf)我想更新我的数据表的行。问题是当我点击更新数据表上的按钮时,会出现带有验证错误的对话框。
第二件事是方法执行次数的顺序。(action-update-onclick-f:setPropertyActionListener)
<p:commandButton id="updateButtonId"
action="#{myController.showCompanyEditPanel}"
update=":tabView:companyForm:companyEditPanel"
onclick="companyDialog.show()"
icon="ui-icon-pencil" title="update">
<f:setPropertyActionListener value="#{company}" target="#{myController.selectedCompany}" />
</p:commandButton>
<p:dialog id="editCompanyDialogId" header="CompanyEdit" widgetVar="companyDialog" resizable="false">
<p:panel id="companyEditPanel" >
//some stuff here
</p:panel>
</p:dialog>
答案 0 :(得分:1)
您似乎忽略了在此处使用<p:commandButton>
的主要观点,以及似乎混合了客户端和服务器端事件。
首先在<p:commandButton>
。此组件旨在将POST(部分)表单数据设置为当前URL,执行业务作业(侦听器)方法并返回更新的组件/执行导航。您当然可以将JavaScript事件“附加”到所有这些属性。
其次,onclick
,oncomplete
和其他on...
属性对应于某些客户端事件。特别是,单击按钮时会触发onclick
函数,在AJAX调用后更新DOM时会调用oncomplete
函数,即<p:ajax update="...">
或update="..."
中指定的元素} <p:commandButton>
的属性。
第三,所有动作监听器(因此,actionListener
属性,<f:actionListener>
标签,<f:setPropertyActionListener>
标签)将按照标签中指定的顺序执行,请参阅{{3更详细的说明。最后一个要执行的是action
方法,然后发送回来。