我已经在使用primefaces的数据表中实现了一个搜索功能,这是一个简单的搜索,只搜索所有字段中的用户输入的值,这工作正常,但是当我搜索所需的字段时,我得到了结果很好但是现在我的命令链接不起作用,它们在我搜索之前工作正常但是一旦显示搜索结果,命令链接不再起作用,我怎样才能使这些工作在搜索上?
这是数据表
<p:dataTable id="UserTable"
widgetVar="usersTable"
value="#{userdetailsController.items}"
var="item"
emptyMessage="No details was found with given criteria">
<!--filteredValue="{userdetailsController.filteredUsers}" -->
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search all fields: " />
<p:inputText id="globalFilter" onkeyup="usersTable.filter()" style="width:150px" />
</p:outputPanel>
</f:facet>
<p:column id="USERID" filterBy="id"
headerText="i.d."
filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="#{bundle.ListUserdetailsTitle_id}"/>
</f:facet>
<h:outputText value="#{item.id}"/>
</p:column>
<!--There are four different match modes, "startsWith"(default), "endsWith", "contains" and "exact"-->
<p:column id="USERNAME" filterBy="username"
headerText="username."
filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="#{bundle.ListUserdetailsTitle_username}"/>
</f:facet>
<h:outputText value="#{item.username}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value=" "/>
</f:facet>
<p:commandLink action="#{userdetailsController.prepareView}" value="#{bundle.ListUserdetailsViewLink}"/>
<h:outputText value=" "/>
<div class="divider"/>
<p:commandLink action="#{userdetailsController.prepareEdit}" value="#{bundle.ListUserdetailsEditLink}"/>
<h:outputText value=" "/>
<div class="divider"/>
<p:commandLink actionListener="#{userdetailsController.destroy}" value="#{bundle.ListUserdetailsDestroyLink}"
ajax="true" update="UserTable"/>
</p:column>
</p:dataTable>
答案 0 :(得分:0)
您是否检查过javascript控制台是否显示任何错误或警告?这是使用primeface plus时的常见问题,您可以告诉我们您是否使用了多种形式,这些形式可能会导致命令链接的错误。
到目前为止,您提供的代码无法提供足够的线索...... IMO
答案 1 :(得分:0)
您可以尝试多种可能的补救措施。
首先向您的dataTable添加filteredValue:filteredValue="#{userdetailsController.filteredItems}"
您需要将支持列表添加到userdetailsController。
此外,对于列过滤器,请更改字段引用以使用EL:filterBy="#{item.username}"
根据您的PrimeFaces版本,您的globalFilter inputText可能需要像这样引用dataTable:onkeyup="PF('usersTable').filter()"
以使全局过滤器正常工作。
我遇到的另一个问题是,我的WildFly应用服务器并不喜欢包含" "
。它甚至不会加载页面,因此如果这会导致您的应用服务器出现问题,您可能需要考虑使用替代方案。
以下是使用不同命名的支持bean而没有资源包的整个解决方案:
<h:form id="exampleForm2" prependId="false">
<p:dataTable id="UserTable"
widgetVar="usersTable"
value="#{collectorView.items}"
filteredValue="#{collectorView.filteredItems}"
var="item"
emptyMessage="No details was found with given criteria">
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search all fields: " />
<p:inputText id="globalFilter" onkeyup="PF('usersTable').filter()" style="width:150px" />
</p:outputPanel>
</f:facet>
<p:column id="USERID" filterBy="#{item.id}"
headerText="i.d."
filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Id"/>
</f:facet>
<h:outputText value="#{item.id}"/>
</p:column>
<!--There are four different match modes, "startsWith"(default), "endsWith", "contains" and "exact"-->
<p:column id="USERNAME" filterBy="#{item.username}"
headerText="username."
filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText value="#{item.username}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value=" "/>
</f:facet>
<p:commandLink action="#{collectorView.prepareView}" value="View"/>
<h:outputText value=" "/>
<div class="divider"/>
<p:commandLink action="#{collectorView.prepareEdit}" value="Edit"/>
<h:outputText value=" "/>
<div class="divider"/>
<p:commandLink action="#{collectorView.destroy}" value="Delete"
update="UserTable" />
</p:column>
</p:dataTable>
</h:form>
如果这些补救措施都没有解决您的问题,那么问题可能在其他地方。 javascript失败,因为其他答案表明也会导致您描述的症状。