2013-07-02 124 views
0

我只能在用戶管理員手動編輯之前編輯自定義字段。登錄後編輯自定義屬性

我的代碼有什麼問題,我該怎麼做才能解決這個問題?

的確如此,我試圖在門戶中登錄時爲用戶自定義屬性賦值。而且我無法在指定的條件下獲得ExpandoColumn。

問題是ExpandoValue爲null。

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

是空當我訪問自定義屬性的價值。如果我手工編輯這個customattribute,然後執行相同的代碼,它的工作原理!我不知道爲什麼,我不知道如何解決這個問題。

回答

1

編輯(你更新的問題後)

看看在ExpandoValueLocalService javadoc:你會發現,有一個createExpandoValue方法。現在猜測「您尚未手動設置該值,並且您將返回null作爲ExpandoValue」與「您已設置一次並取回可更新的值的方案之間的關係......

另一種選擇是爲您的expando值指定一個默認值 - 這樣您肯定會有一個值,並且您可以無條件地更新它(至少在故意刪除之前) - 您仍應該滿足的穩健性這種可能性)

原來的答覆:

還有其他地方,但在if條件你去您有試過?條件還是你之前得到任何異常?例如。您可能需要先創建「默認」表,然後才能獲取它。有關如何訪問Expando表格/列的示例,請參閱this code

我沒有運行你的代碼,但是當然也可能會出現異常。或者你可能在配置LoginAction時犯了一個錯誤,以至於它根本不能運行。

+0

我更新的問題:我的問題是,「ExpandoValue expandoValue = ExpandoValueLocalServiceUtil.getValue(expandoTable.getTableId(),expandoColumn.getColumnId(),classPK);「當我訪問自定義屬性的值時爲空。如果我手工編輯這個customattribute,然後嘗試相同的功能! – user1592470

+0

看到我的回答更新 –

+0

我試過這個解決方案!問題是我無法找到或生成一個免費的valueId。你知道我怎麼能找到一個?而且..我已經爲expando值指定了一個默認值而沒有成功。謝謝。 – user1592470

1

默認情況下,普通用戶角色沒有權限訪問Expando的值。

無論如何,最好是修改的expando值與

User user = UserLocalService.getUserById(userId); 
user.getExpandoBridge().setAttribute("attributeName", "attributeValue"); 

如果你想與任何權限修改的值,使用

user.getExpandoBridge().setAttribute("attributeName", "attributeValue", false); 
相關問題