Login 登录后编辑自定义属性
在使用用户管理员手动编辑自定义字段之前,我只能编辑该字段 我的代码有什么问题,我应该怎么解决这个问题 确切地说,我正试图在用户自定义属性登录门户时为其分配一个值。我不能在规定的条件下得到ExpandoColumn 问题是ExpandoValue为空。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) {
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值指定了默认值,但没有成功。谢谢。”。