10

我正在使用 Liferay 6 进行门户开发。在 Liferay 下创建用户期间,我还需要添加一些额外的字段??请让我知道这是否可能?

请参阅此处附上的屏幕截图,也请告诉我这将存储在数据库中的哪个表中?

在此处输入图像描述

4

5 回答 5

13

是的,您可以为 liferay 实体(在您的情况下为用户)使用自定义属性功能 ,并且可以根据需要为每个 liferay 实体添加尽可能多的额外字段。

可以通过以下方式创建用户实体的自定义字段:
Control Panel -> Portal -> Custom Fields -> User

并且可以通过编程方式创建如下:

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

然后将值设置为:

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

如果您的自定义字段已经存在,您可以像这样检查:

if (user.getExpandoBridge().hasAttribute("yourCustomFieldKey")) { ... };

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

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

希望这可以帮助。

于 2012-04-16T08:58:50.523 回答
3

万一有人尝试从自定义字段中检索值并且遇到方法返回的空值问题user.getExpandoBridge().getAttribute("yourCustomFieldKey")(即使您遵循有关权限的线程),我找到了其他方法来检索自定义字段值:

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();

不那么漂亮,但做的工作。

于 2013-03-14T08:19:36.263 回答
3

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

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

您可以通过控制面板Portal->Custom Fields或在 liferay 启动时以编程方式创建的用户实体的 Custim 字段。

数据将存储在ExpandoValue表中。

于 2012-04-13T08:33:56.463 回答
0

liferay中的用户创建页面可以自定义。您实际上可以决定在用户​​创建页面中显示哪些字段。更多关于这个在这里。

于 2012-04-21T10:36:11.347 回答
0

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

user.getExpandoBridge().addAttribute("yourCustomFieldKey",false);
user.getExpandoBridge().setAttribute("yourCustomFieldKey", "valueForCustomField",false);
于 2014-07-10T08:34:40.587 回答