我在Liferay中添加了自定义用户字段,并为特定用户设置了值。
如何以编程方式访问此值?
如果我试试这个,我总是得到null:
String customAttr = (String)user.getExpandoBridge().getAttribute("customAttr");
user.getExpandoBridge().getAttribute("customAttr")
返回类型java.IO.Serializable
的值。
也许这里的演员是错的?
但是自定义属性确实存在(以下代码打印出属性键):
for (Enumeration<String> attrs = user.getExpandoBridge().getAttributeNames(); attrs.hasMoreElements();)
_log.info("elem: '" + attrs.nextElement() + "'");
不知怎的,我在这里错过了这一点......
答案 0 :(得分:8)
这是一个安全问题......
在com.liferay.portlet.expando.service.impl.ExpandoValueServiceImpl.getData(String className, String tableName, String columnName, long classPK)
:
if (ExpandoColumnPermission.contains(
getPermissionChecker(), column, ActionKeys.VIEW)) {
return expandoValueLocalService.getData(
className, tableName, columnName, classPK);
}
else {
return null;
}
我只需要在自定义expando值上设置视图权限,一切正常。
答案 1 :(得分:1)
我知道它有点晚了,但是对于那些仍在试图弄清楚为什么自定义字段变为null(尽管它在Liferay中明确设置并可见)的人,请首先确保自定义字段具有权限正确设置(控制面板 - &gt;自定义字段 - &gt;用户 - &gt;选择适当的自定义字段,然后单击操作 - &gt;权限)。默认情况下,所有者拥有所有权限,但在我的情况下,例如,我需要具有Guest帐户的View权限(用户在登录过程中)。希望这会有所帮助。
答案 2 :(得分:0)
检查here如何在CSV http://liferay.bdedov.eu/2012/02/exporting-user-custom-fields-in-csv.html中为用户导出自定义字段(expando字段)时解决问题。如果要导出用户并定义要包含在导出中的自定义字段,则只会为自定义字段接收空值。查看this post以了解如何解决此问题。