Login 登录后编辑自定义属性

Login 登录后编辑自定义属性,login,liferay,hook,liferay-6,Login,Liferay,Hook,Liferay 6,在使用用户管理员手动编辑自定义字段之前,我只能编辑该字段 我的代码有什么问题,我应该怎么解决这个问题 确切地说,我正试图在用户自定义属性登录门户时为其分配一个值。我不能在规定的条件下得到ExpandoColumn 问题是ExpandoValue为空。 public class LoginAction extends Action { public void run(HttpServletRequest req, HttpServletResponse res) {

在使用用户管理员手动编辑自定义字段之前,我只能编辑该字段

我的代码有什么问题,我应该怎么解决这个问题

确切地说,我正试图在用户自定义属性登录门户时为其分配一个值。我不能在规定的条件下得到ExpandoColumn

问题是ExpandoValue为空。

 public class LoginAction extends Action {

        public void run(HttpServletRequest req, HttpServletResponse res) {
            User currentUser;
            try {
                currentUser = PortalUtil.getUser(req);
                long userId = PrincipalThreadLocal.getUserId();
                long companyId = currentUser.getCompanyId();            
                long groupId = GroupLocalServiceUtil.getGroup(companyId, "Guest").getGroupId();

                /* Get de CustomField Segmentation */
                ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.getDefaultTable(companyId, User.class.getName());

                ExpandoColumn expandoColumn = ExpandoColumnLocalServiceUtil.getColumn(companyId, User.class.getName(), expandoTable.getName(), "Segmentation");           


          if (expandoColumn != null) {
                 ExpandoValue expandoValue = ExpandoValueLocalServiceUtil.getValue(expandoTable.getTableId(), expandoColumn.getColumnId(), userId);

          if (expandoValue != null) {
                 expandoValue.setData(finalsegment);


                 ExpandoValueLocalServiceUtil.updateExpandoValue(expandoValue);

          }
   }
}

总结:我的问题是

ExpandoValue ExpandoValue=ExpandoValueLocalServiceUtil.getValue(expandoTable.getTableId(),expandoColumn.getColumnId(),classPK)

当我访问自定义属性的值时为Null。如果我手工编辑这个customattribute,然后执行与它相同的代码!!!我不知道为什么,也不知道如何解决这个问题。

编辑(在您更新问题后)

看看:您会发现有一个
createExpandoValue
方法。现在猜猜场景“您根本没有手动设置值,您将返回
null
作为ExpandoValue”与“您已设置一次并返回一个可以更新的值”之间的关系

另一种选择是只为expando值指定一个默认值——这样,您肯定会在其中有一个值,并且您可以无条件地更新它(至少在故意删除它之前——为了健壮性,您仍然应该考虑这种可能性)

原始答复:

除了在
if
条件下,您还去了哪里?您是否尝试过
else
条件,或者您以前是否遇到过任何异常?例如,您可能需要先创建“default”表,然后才能获得它

有关如何访问Expando表/列的示例,请参见


我没有运行您的代码,但当然,异常也可能会更早发生。或者您可能在配置
登录操作时出错,使其根本无法运行。

在这里我找到了问题的答案

您可以使用建议的代码管理解决方案


默认情况下,常规用户角色没有访问Expando值的权限

无论如何,最好使用

User user = UserLocalService.getUserById(userId);
user.getExpandoBridge().setAttribute("attributeName", "attributeValue");
如果要使用任何权限修改值,请使用

user.getExpandoBridge().setAttribute("attributeName", "attributeValue", false);

我更新了这个问题:我的问题是“ExpandoValue ExpandoValue=ExpandoValueLocalServiceUtil.getValue(expandoTable.getTableId(),expandoColumn.getColumnId(),classPK);“当我访问自定义属性的值时为空。如果我手动编辑此自定义属性,然后尝试相同的it功能!!!我尝试了此解决方案!!!问题是我找不到或无法生成免费的valueId。您知道如何找到它吗?和..我已经为expando值指定了默认值,但没有成功。谢谢。”。