在Liferay中创建用户时是否可以添加额外字段

10

我正在使用 Liferay 6 进行门户开发。 在创建 Liferay 用户时,我需要添加一些额外的字段吗? 请告诉我这是否可能。

请查看附加的截图,并告诉我这将存储在数据库中的哪个表中?

enter image description here

5个回答

13

是的,你可以使用自定义属性功能来增强Liferay实体(在你这种情况下是用户),并且可以为每个Liferay实体添加必要的额外字段。

通过以下方式可以为用户实体创建自定义字段:
控制面板 -> 门户 -> 自定义字段 -> 用户.

也可以按照以下程序方式创建:

user.getExpandoBridge().addAttribute("yourCustomFieldKey");

然后将值设置为:

user.getExpandoBridge().setAttribute("yourCustomFieldKey", "valueForCustomField");
如果你的自定义字段已经存在,你可以像这样检查:
if (user.getExpandoBridge().hasAttribute("yourCustomFieldKey")) { ... };

数据存储在以"EXPANDO"为前缀的表中:

  • EXPANDOCOLUMN: 存储自定义字段键和其他设置(包含tableId引用)
  • EXPANDODATA: 存储自定义字段键对应的值(包含columnId和tableId引用)
  • EXPANDOTABLE: 存储用于哪个Liferay实体(用户)添加自定义字段
  • EXPANDOROW: 存储用户及其值之间的链接信息(包含tableId和userId引用)

希望这能有所帮助。


3

如果有人尝试从自定义字段中检索值并且遇到user.getExpandoBridge().getAttribute("yourCustomFieldKey")方法返回null值的问题(即使您已经按照权限线程),我找到了另一种获取自定义字段值的方法:

ExpandoTable table = ExpandoTableLocalServiceUtil.getDefaultTable(user.getCompanyId(), User.class.getName() );
ExpandoColumn column = ExpandoColumnLocalServiceUtil.getColumn(table.getTableId(), "yourCustomFieldKey");
ExpandoValue expandoValue = ExpandoValueLocalServiceUtil.getValue(table.getTableId(), column.getColumnId(), user.getUserId());

如果字段是文本,您可以使用 expandoValue.getString(); 进行简单操作。

虽然不太美观,但能实现功能。


3

是的,您可以将自定义字段添加到用户实体,并向用户添加字段值:

user.getExpandoBridge().addAttribute(...);

您可以通过控制面板 Portal->自定义字段 或者在 liferay 启动时通过编程创建用户实体的自定义字段。
数据将存储在 ExpandoValue 表中。

0
Liferay 中的用户创建页面可以进行自定义。实际上,您可以决定在用户创建页面中出现哪些字段。更多信息请点击此处。

0

如果在添加或设置属性时遇到权限问题,请使用以下命令。

user.getExpandoBridge().addAttribute("yourCustomFieldKey",false);
user.getExpandoBridge().setAttribute("yourCustomFieldKey", "valueForCustomField",false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接