2016-05-16 38 views
3

我正在通過工作更新我的網站屬性。作業運行正常,它的工作正確,更新了我希望它正確更新的屬性,從未失敗。更新網站屬性使所有頁面消失(Sak 2.9.3)

但是,當我保存網站時,它會弄亂我的頁面,使它們消失。最糟糕的是,它並不總是發生@。@是什麼讓我發瘋? =(

我確定這項工作是正確的,因爲一旦我得到所有的頁面(通過工作現場設置和網站編輯器)的東西得到所有工作在這裏我更新屬性的方法(我已經嘗試了兩個選項財產版方式:

@Override 
public void updateStringProperty(Site site, String name, String value) { 
    try { 
     // ResourcePropertiesEdit rpe = site.getPropertiesEdit(); 
     // rpe.addProperty(name, value); 

     ResourceProperties rp = site.getProperties(); 
     rp.addProperty(name, value); 

     siteService.save(site); 
    } catch (IdUnusedException e) { 
     e.printStackTrace(); 
    } catch (PermissionException e) { 
     e.printStackTrace(); 
    } 
} 

這是寫的代理層,其中我與酒井接口應用會談,讀/寫數據到酒井DATABSE上(你可以看到該網站來自上面的實例),它是我如何得到應用更改的網站列表(也包括代理層):

@Override 
public List<Site> getReadInWebSites(Long course) { 
    Map<String, String> m = new HashMap<String, String>(); 
    m.put(Property.COURSE.getName(), Long.toString(course)); 
    m.put(Property.COURSEFINISHED.getName(), Boolean.toString(false)); 

    return new ArrayList<Site>(siteService.getSites(SelectionType.ANY, 
      null, null, m, SortType.CREATED_BY_ASC, null)); 
} 

提前致謝!

編輯:新的信息,當我嘗試訪問該網站(之前通過站點設置重建其結構,我得到這個警告在日誌中:

org.sakaiproject.portal.charon.site.DefaultSiteViewImpl - Failed to set canAddSite for current user. Defaulting to false ...

回答

1

這是因爲當酒井站點加載與getSites他們是懶惰的對象,並沒有加載所有他們的成員變量。這是非常不理想和SiteService應該真的要麼拋出一個異常,當你這樣做或加載所需的數據。

但是爲了讓它工作當你修改一個網站完全加載網站冷杉t在你做出改變之前。

Site site = siteService.getSite(site.getId()); 
ResourceProperties rp = site.getProperties(); 
rp.addProperty(name, value); 
siteService.save(site); 
+0

謝謝,我會嘗試解決方案並給你反饋。我幾乎嘗試過這樣的事情,但我害怕讓問題變得最糟糕,因爲我不知道SiteSevice究竟是如何處理站點實例的(很高興知道它的延遲加載)。 我已經通過創建一個同時更新多個屬性的方法來降低問題: public void updateStringProperties(Site site,Hashmap properties) –

相關問題