数据表全局过滤器 - 意外行为
Datatable Global Filter - Unexpected Behavior
我有一个 globalfilter in a Datatable 在用户按下 Enter 时工作:
它按预期过滤。但是,奇怪的是,数据表过滤后,在p:dialog中也显示了createForm,这不是预期的;此 createForm 是,并且应该仅在用户单击调用它的 createButton 时显示。
以上,与组件相关的代码摘录。
createButton 和数据表:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:form id="DemandasListForm">
<p:panel id="PanelListForm">
<p:commandButton id="createButton" icon="fa fa-plus-square" value="#{adeBundle.CreateDemanda}" update=":DemandasCreateForm" oncomplete="PF('DemandasCreateDialog').show()" actionListener="#{demandasController.prepareCreate}" />
<f:facet name="header">
<p:outputPanel style="text-align: right">
<p:inputText id="globalFilter" onkeypress="if (event.keyCode === 13) {PF('demandasTable').filter();}" placeholder="Type something and press ENTER." />
</p:outputPanel>
</f:facet>
<p:dataTable id="datalist"
value="#{demandasController.items}"
lazy="false"
rowKey="#{item.id}"
var="item"
paginator="true"
paginatorPosition="bottom"
selectionMode="single"
selection="#{demandasController.selected}"
filteredValue="#{demandasController.filteredDemandas}"
filterDelay="1000" <!-- doesn't work for globalfilter, only for the columns-->
widgetVar="demandasTable">
...
</p:dataTable>
对话框:
<ui:composition>
<p:dialog id="DemandasCreateDlg" widgetVar="DemandasCreateDialog" modal="true" appendTo="@(body)" closeOnEscape="true">
<h:form id="DemandasCreateForm">
...
有谁知道我该如何解决这个问题?
提前致谢。
可以这样尝试return false..
onkeypress="if (event.keyCode === 13) {PF('demandasTable').filter(); return false;}"
这将在调用过滤方法后中断,并且不会让 ENTER 键传播。我认为正在发生的事情是 ENTER 键正在提交表单上的第一个按钮,这是您打开对话框的命令按钮。默认浏览器行为是在您按 ENTER 时提交它在表单上找到的第一个按钮。
我有一个 globalfilter in a Datatable 在用户按下 Enter 时工作:
它按预期过滤。但是,奇怪的是,数据表过滤后,在p:dialog中也显示了createForm,这不是预期的;此 createForm 是,并且应该仅在用户单击调用它的 createButton 时显示。
以上,与组件相关的代码摘录。
createButton 和数据表:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:form id="DemandasListForm">
<p:panel id="PanelListForm">
<p:commandButton id="createButton" icon="fa fa-plus-square" value="#{adeBundle.CreateDemanda}" update=":DemandasCreateForm" oncomplete="PF('DemandasCreateDialog').show()" actionListener="#{demandasController.prepareCreate}" />
<f:facet name="header">
<p:outputPanel style="text-align: right">
<p:inputText id="globalFilter" onkeypress="if (event.keyCode === 13) {PF('demandasTable').filter();}" placeholder="Type something and press ENTER." />
</p:outputPanel>
</f:facet>
<p:dataTable id="datalist"
value="#{demandasController.items}"
lazy="false"
rowKey="#{item.id}"
var="item"
paginator="true"
paginatorPosition="bottom"
selectionMode="single"
selection="#{demandasController.selected}"
filteredValue="#{demandasController.filteredDemandas}"
filterDelay="1000" <!-- doesn't work for globalfilter, only for the columns-->
widgetVar="demandasTable">
...
</p:dataTable>
对话框:
<ui:composition>
<p:dialog id="DemandasCreateDlg" widgetVar="DemandasCreateDialog" modal="true" appendTo="@(body)" closeOnEscape="true">
<h:form id="DemandasCreateForm">
...
有谁知道我该如何解决这个问题?
提前致谢。
可以这样尝试return false..
onkeypress="if (event.keyCode === 13) {PF('demandasTable').filter(); return false;}"
这将在调用过滤方法后中断,并且不会让 ENTER 键传播。我认为正在发生的事情是 ENTER 键正在提交表单上的第一个按钮,这是您打开对话框的命令按钮。默认浏览器行为是在您按 ENTER 时提交它在表单上找到的第一个按钮。