【问题标题】:Command links no longer work after submitting the form提交表单后命令链接不再起作用
【发布时间】:2013-11-18 10:34:35
【问题描述】:

我已经使用 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="&nbsp;"/>
        </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>

【问题讨论】:

    标签: jsf primefaces datatable


    【解决方案1】:

    您可以尝试多种可能的补救措施。

    首先给你的dataTable添加一个filteredValue:filteredValue="#{userdetailsController.filteredItems}"

    您需要将支持列表添加到您的 userdetailsController。

    另外,为您的列过滤器更改字段引用以使用 EL:filterBy="#{item.username}"

    根据您的 PrimeFaces 版本,您的 globalFilter inputText 可能需要像这样引用 dataTable:onkeyup="PF('usersTable').filter()" 以使全局过滤器正常工作。

    我遇到的另一个问题是,我的 WildFly 应用服务器不喜欢包含 "&amp;nbsp;"。它甚至不会加载页面,因此如果这会导致您的应用服务器出现问题,您可能需要考虑使用替代方法。

    以下是使用不同命名的支持 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 也会导致您所描述的症状。

    【讨论】:

      【解决方案2】:

      您是否检查过 javascript 控制台是否显示任何错误或警告?这是使用 primeface plus 时的常见问题,您可以告诉我们您是否使用了多种形式,这也可能导致 commandlink 故障。

      到目前为止,您提供的代码无法提供足够的线索... IMO

      【讨论】:

        猜你喜欢
        • 2019-11-08
        • 2017-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        相关资源
        最近更新 更多