p:PrimeFaces 4.0中不带getter的数据表排序

p:PrimeFaces 4.0中不带getter的数据表排序,primefaces,Primefaces,我有一个显示数据的数据表,但排序不起作用 问题是,这些记录没有getFieldName getter,而是getValue('FieldName')。这允许我在不重新编译的情况下更改模式 例如,其中一个字段是日期 我想要一些技巧来让代码正常工作,而不必为每个表创建自定义bean,从而与物理数据模型紧密耦合 <p:column headerText="Date" sortBy="#{r.getValue('date')}">

我有一个显示数据的数据表,但排序不起作用

问题是,这些记录没有getFieldName getter,而是getValue('FieldName')。这允许我在不重新编译的情况下更改模式

例如,其中一个字段是日期

我想要一些技巧来让代码正常工作,而不必为每个表创建自定义bean,从而与物理数据模型紧密耦合

                    <p:column headerText="Date" sortBy="#{r.getValue('date')}">
                        <h:outputText value="#{r.getValue('date')}" />
                    </p:column>

您希望它的工作方式不是它在
p:dataTable
中的工作方式。我不确定普通直接(非惰性)过滤是如何工作的。我从来没有使用过它,而且我总是使用大量的基类,因此它很容易为不同的实体实现,并提供了完全的控制(OptimusFaces在这里提供了帮助)

对于LazyDataModel,需要放置“EL”的
sortBy
属性实际上不是作为EL计算的。不在6.2中,但iirc也不在4.0中。事实上,你放在那里的EL是`{..}的点画,并在那里预期的点上分裂。生成的部分将传递给过滤器属性中的load方法

所以

传递给load方法作为

myAttribute 
从showcase中的LazyDataModel.java中可以看到(过滤btw也是如此)

只用

sortBy="#{myFakePrependeSomething.date}"
如果要对对象的字段进行排序,请使用

sortBy="#{myFakePrependeSomething.item.date}"

然后传入'item.date',您只需进行反射,首先获取'item'字段,然后获取日期。OptimusFaces对此很有帮助

我认为最好切换到lazyLoading,在sortBy中声明
{bla.date}
,或者其他一些假EL,它们被剥离并返回“date”。对于bla.date,bla需要实现一个方法getDate(),对吗?如果是这样,这就是我想要避免的。数据访问层不知道应用层的表的字段名。因此,如果不为每个数据库表或视图创建特定的bean,我就不能拥有一个可排序表。。。第一部分被剥离,在lazyDataModel中的load方法中,只传递日期bla可以是任何东西(至少可以是)。如果你能写一些示例代码。。。但我会研究惰性加载,谢谢!这一切都在PrimeFaces手册、showcase(记住使用这两个版本的4.0版)、PrimeFaces论坛和stackoverflow以及互联网的其他部分中。。。如果你有实际的编码问题,我愿意帮助你。
sortBy="#{r.getValue('date')}"
sortBy="#{myFakePrependeSomething.date}"
sortBy="#{myFakePrependeSomething.item.date}"