如果datatable被筛选为primefaces 5.0,则返回空的选定对象

如果datatable被筛选为primefaces 5.0,则返回空的选定对象,primefaces,datatable,Primefaces,Datatable,希望有人能给我一个关于这个案件的提示,在发布这个问题之前搜索了很多,但没有运气 我有一个datatable,它只允许一行选择(一次可能包括200行),选择一行后,commandButton会将用户重定向到一个新表单以显示一些信息 当用户第一次在datatable中对任何给定列应用筛选器,选择一行并单击commandButton时,问题就会出现,我的支持bean(@ViewScoped)没有收到任何选定对象(null) 由于表单很大,我在这里只发布了部分表单以显示Datatable结构: <

希望有人能给我一个关于这个案件的提示,在发布这个问题之前搜索了很多,但没有运气

我有一个datatable,它只允许一行选择(一次可能包括200行),选择一行后,commandButton会将用户重定向到一个新表单以显示一些信息

当用户第一次在datatable中对任何给定列应用筛选器,选择一行并单击commandButton时,问题就会出现,我的支持bean(@ViewScoped)没有收到任何选定对象(null)

由于表单很大,我在这里只发布了部分表单以显示Datatable结构:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:fn="http://java.sun.com/jsp/jstl/functions">

    <h:body >   
        <h:form id="Form1"> 

                <p:outputPanel id="ID1">
                    .
                    .
                    .
                    <table cellpadding="4" cellspacing="4" border="0" style="width: 100%;">
                    <tr> 
                        <td><b><big><big><font face="Arial" >#{beanD.MenuTitle} > List of records </font></big></big></b></td>
                        <td>
                            <b><big><font face="Arial"><p:outputLabel value="|" /></font></big></b>
                        </td>
                        <td style="width: 150px;">
                            <p:commandButton style="font-family:Arial;font-size: 13px;" icon="ui-icon-check" value="Open Record" ajax="false" 
                                         actionListener="#{MBR.Method1(2,MBR.var1.cod,MBR.var1.codS)}" action="#{beanD2.url_Menu('FormRedirected')}"/>
                        </td>
                    </tr>
                    </table>

                    <table cellpadding="4" cellspacing="4" border="0">
                        <tr>
                            <td>                      
                                <p:dataTable  var="Rad" selectionMode="single" value="#{MBSg.list}" 
                                              id="RSTable"  widgetVar="RS"  selection="#{MBR.var1}" rowKey="#{Rad.codS}"
                                              style="font-family: Arial;font-size: 12px; height: 320px;" emptyMessage="No Records" 
                                              scrollable="true" scrollHeight="100%;" frozenColumns="1" styleClass="FirstCol" >
                                    <p:column headerText="Header1"  filterStyle="font-family:Arial;font-size: 12px;width:60px;" filterBy="#{Rad.field1}" filterMatchMode="contains"  style="font-family:Arial;font-size: 12px;width: 60px;">
                                        <h:outputText value="#{Rad.field1}" />
                                    </p:column>
                                    <p:column headerText="Header2" filterBy="#{Rad.field2}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 250px;">
                                        <h:outputText value="#{Rad.field2}" />
                                    </p:column>
                                    <p:column headerText="Header3"  filterBy="#{Rad.field3}#{Rad.entidades}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 900px;">
                                        <h:outputText value="#{Rad.field3}" />
                                    </p:column>
                                    <p:column headerText="Header4" filterBy="#{Rad.field4}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 100px;">
                                        <h:outputText value="#{Rad.field4}" />
                                    <p:column headerText="Header5"  filterStyle="font-family:Arial;font-size: 12px;width:70px;"  filterBy="#{Rad.field5}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 120px;">
                                        <h:outputText value="#{Rad.field5}" />
                                    </p:column>                                                            

                                </p:dataTable>
                            </td>
                        </tr>
                    </table>
                </p:outputPanel>
        </h:form>
    </h:body>
</html>
如前所述,如果在过滤后进行选择(然后单击commandButton),则在MyBean中启动此消息:mbT.setMens(“未选择项”)

顺便说一句,过滤效果很好,根本没有问题

应用程序是使用Primefaces 5.0开发的,现在没有机会升级

我已经在谷歌上搜索并阅读了PrimeFaces的展示,但没有找到任何答案

致以最良好的祝愿

上次更新:

经过大量测试后,我发现DataTable的属性frozenColumns是在筛选表时导致这种奇怪行为的原因。希望StackOverflow方面的任何专家都能让我们更深入地了解其背后的原因


根据我的问题,删除属性后,datatable工作正常。希望以后有人会觉得这个有用。

我遇到了类似的问题,最后发现我错过了
dataTable
标记中的
filteredValue
属性。

我遇到了类似的问题,最后发现我错过了数据表中的
filteredValue
属性
dataTable
标记。

在p:dataTable组件上添加行键作为属性

<p:dataTable value="#{myBean.cars}" var="car" rowKey="#{car.id}">
  ...
<p:dataTable>

...

在p:dataTable组件上添加一个行键作为属性

<p:dataTable value="#{myBean.cars}" var="car" rowKey="#{car.id}">
  ...
<p:dataTable>

...

您是否尝试添加ajax事件?!?您是否也对您的
var1
Yagami进行了初始化谢谢您的回复。当然,var1是在表单加载时初始化的。我尝试了使用datatable中包含的方法。Debuggin我发现每当选择一行(带或不带过滤器)时都会触发ajax事件,但如果datatable之前已过滤,则var1也会变为null。有什么线索吗?试着将其作为参数发送,我相信它会起作用。看看这个例子,你必须将你的变量从数据表发送到一个对象(与变量相同),它会保存它,告诉我你是否需要更多信息No luck@Yagami!同样的行为。这有点棘手:(你是否尝试添加ajax事件?!?你是否对
var1
Yagami进行了初始化谢谢你的回复。当然,var1是在表单加载时初始化的。我尝试了一种使用“包含在我的数据表中”的方法。Debuggin我发现每当选择一行时都会触发ajax事件(带或不带过滤器)但是如果datatable以前被过滤过,var1也会变为null。有什么线索吗?尝试将其作为参数发送我相信它会起作用。看这个例子,您必须将您的var从datatable发送到一个对象(与var相同)如果你需要更多的信息,它会保存下来告诉我。运气不好@Yagami!同样的行为。这有点棘手:(