[Liferay] 使用 Expando 自定义字段搜索对象

本文介绍了一种在Liferay平台上通过自定义字段搜索特定属性值(如用户身高为180)的方法。首先定义搜索参数,包括自定义字段名和值,接着获取目标对象类型ID及公司ID,最后利用这些信息检索匹配的自定义值并获取对应的用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们现在给 User 加一个自定义字段 “Height”, 有一个user 名字是 "John" ,其 “Height” 属性值为180.
现在需要搜索所有自定义字段 “Height” 值为 180 的user。

先初始化两个变量, 分别为自定义字段的名字, 与需要搜索的值。
String customAttributeName="height"

String customAttributeValue="180"

我们需要定义需要搜索 Object 的类型, 因为可能会有不同类型的 Object 都有着同样的自定义字段 “Height”。
同时需要 companyId 用来标识 server 实例。
long classNameId = ClassNameLocalServiceUtil.getClassNameId(User.class);
long companyId = PortalUtil.getDefaultCompanyId();

接下来
List<ExpandoValue> values = ExpandoValueLocalServiceUtil.getColumnValues(companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME, customAttributeName,customAttributeValue, -1, -1);

现在得到的是一个 List 的 ExpandoValue 对象。
注意 ExpandoValue 对象, 有一个 getPrimaryKey() 方法, 可以用来或者目标对象的 primary key, 在这个例子, 也就是User对象的primary key。
每个liferay object 都有一个 primary key, 用来标识其为唯一的对象。
//get primary key of User object (userId)
user.getUserId();  or
user.getPrimaryKey();

//get primary key of Organization object (organizationId)
organization.getOrganizationId(); or
organization.getPrimaryKey();

//get primary key of Group
group.getGroupId(); or
group.getPrimaryKey();

所以接下来要做的, 是找到每个 ExpandoValue 对象对于的 User 对象。
//create an arraylist to store user objects
List<User> users = new ArrayList<User>();
//temp user object
User user;       

//iterate through list of ExpandoValues and for each
// element try to find corresponding user object
for (int i = 0; i < values.size(); i++) {
  long userId = values.get(i).getClassPK();
  try{
    user =  UserLocalServiceUtil.getUser(userId);
    users.add(user)
  }catch(NoSuchUserException e ){ 
     user with this primary key was not found in DB .....           
  }//

完事儿了








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值