Jsf 更改与Primefaces中的排序顺序和搜索筛选器关联的字段名

Jsf 更改与Primefaces中的排序顺序和搜索筛选器关联的字段名,jsf,primefaces,Jsf,Primefaces,我在Primefaces中使用了LazyDataModel。因此,可以在LazyDataModel的重载load()方法中获得与排序顺序和搜索过滤器相关的字段以及其他参数 @Override public List<StateTable> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String, String> filters) { } @覆盖 公共列表加载(int-fi

我在Primefaces中使用了
LazyDataModel
。因此,可以在
LazyDataModel
的重载
load()
方法中获得与排序顺序和搜索过滤器相关的字段以及其他参数

@Override
public List<StateTable> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String, String> filters)
{

}
@覆盖
公共列表加载(int-first、int-pageSize、列表多端口元、映射过滤器)
{
}
所以,如果我有一个这样的专栏

<p:column 
         headerText="Country" 
         resizable="false" 
         sortBy="#{state.country.countryName}" 
         filterBy="#{state.country.countryName}" 
         filterMaxLength="45">

         ...

</p:column>

...
在这种情况下,前面提到的
load()
方法的
multiportmeta
过滤器
参数中可用的字段名将是
country.countryName


我正在按国家名称(而不是国家id)进行排序和筛选。另一个表(州的父表)中提供了国家名称。在该表中,实际的列名是
country\u name
,它由持久性实体类中的名称
countryName
映射

因此,提供的实际字段名
country.countryName
需要替换为
countryName

替换此名称需要在迭代
映射
和/或
列表
时进行条件检查,这非常繁琐,尤其是当存在更多此类嵌套属性时

我正在寻找一种方法,以便在需要时将此名称精确地更改为所需的字段名称。
Primefaces
是否在
或其他地方支持此类功能


另外,它是Primefaces 3.5。

“因此,提供的实际字段名countryId.countryName需要替换为countryName。”我不理解原因。请详细说明。顺便说一下,看到“国家ID”也有国家名称是很奇怪的。
countryId
属性是否最好重命名为
country
?和
countryName
name
?在DB模型中看到国家名称被复制也很奇怪。你不想在country表的ID上使用FK吗?@BalusC:对不起,
countryId
实际上指的是你提到的
country
。这些属性名是由IDE生成的,我没有费心修改它们,是的,
state
表上有一个外键,它引用了
country
表的主键。我正在对
countryName
进行排序和筛选,该列表位于
country
表中。因此,排序和筛选需要在
WHERE
和/或
ORDER BY
子句中使用子查询或与
countryName
(而不是
country.countryName
)的联接。Primefaces提供的字段名,
country.countryName
不能用于JPA条件查询。字段名应为
countryName
,而不是
country.countryName