2016-10-04 18 views
0

我試圖讓使用悅目型鏈表的自定義對象的名單到HTML對象的列表。但我無法看清他們。示例代碼粘貼如下:無法獲得使用Java API使用和悅目(HTL)

的Java Bean:

public class MiniNavBean { 

    private String fPath; 

    private String activeAttr; 

    public MiniNavBean(String fPath, String activeAttr){ 
     this.fPath = fPath; 
     this.activeAttr = activeAttr; 
    } 

    public String getFpath() { 
     return fPath; 
    } 

    public void setFpath(String fpath) { 
     this.fPath = fpath; 
    } 

    public String getActiveattr() { 
     return activeAttr; 
    } 

    public void setActiveattr(String activeattr) { 
     this.activeAttr = activeattr; 
    } 

} 

延伸WCMUsePojo Java類:

public class MiniNav extends WCMUsePojo { 

    private List<MiniNavBean> navList; 

    MiniNavBean miniNav; 

    public List<MiniNavBean> getNavList() { 
     return navList; 
    } 

    public void setNavList(List<MiniNavBean> navList) { 
     this.navList = navList; 
    } 

    @Override 
    public void activate() { 
     navList = new LinkedList<MiniNavBean>(); 
     fPath = "fpaths"; 
     activeAttr = "activeattrs;"  
     miniNav = new MiniNavBean(fpath, activeattr); 
     navList.add(miniNav); 
    } 
} 

HTML文件(悅目):

<div data-sly-include="/apps/project/components/global.jsp"></div> 
<div data-sly-use.mininav="com.components.MiniNav" data-sly-unwrap> 
<div data-sly-list.navlist="${mininav.navList}"> 
    <li> 
    <p>${navlist.fPath}</p> 
    <p>${navlist.activeAttr}</p> 
    </li> 
</div> 

當我試圖執行上面的代碼時,我能夠看到鏈接列表使用java類中的數據實例化。但是,當我試圖在前端顯示列表的值時,看不見它。

由於LinkedList的是CustomObject型(MiniNavBean)我懷疑悅目無法讀取它,因爲它不知道這個bean,因爲我們沒有任何地方是指這個bean的。有沒有一種方法來解決這個問題,使用視覺標籤並讀取數據?

回答

0

在您的示例中,您既沒有爲navList成員MiniNav賦值,也沒有爲其添加MiniNavBean實例。

以下行添加到您的activate()方法:

this.navList = new LinkedList<>(); 
this.navList.add(navList); 

此外,Java的getter和HTL /悅目存取沒有正確對齊,即:爲getFpath()你應該使用navlist.fpath

如果您已經有這些,你是否從HTL/Sightly獲得任何編譯或運行時錯誤?

HTL /悅目通常使用反射來查找對象的屬性,因此不會在意它們的類型。

+0

對不起,這是一個複製粘貼錯誤。我的代碼中已經有了這些更改。但是它不讀取存儲在鏈表中的自定義對象的值。它能夠讀取鏈接列表的類型爲字符串的值,即新鏈接列表() – RRN

+0

我在後端沒有看到任何控制檯錯誤或錯誤日誌 – RRN

+0

@RRN「li」元素是否至少被渲染?我只注意到你的getters/properties沒有正確對齊,例如:'getFpath()'你應該使用'navlist.fpath' – Vlad

0

悅目會遍歷Java對象了。我認爲這不是Sightly的問題。看起來你的吸氣劑是錯的。改變你的bean如下圖所示

public class MiniNavBean { 

    private String fPath; 

    private String activeAttr; 

    public MiniNavBean(String fPath, String activeAttr){ 
     this.fPath = fPath; 
     this.activeAttr = activeAttr; 
    } 

    public String getfPath() { 
     return fPath; 
    } 

    public void setfPath(String fPath) { 
     this.fPath = fPath; 
    } 

    public String getActiveAttr() { 
     return activeAttr; 
    } 

    public void setActiveAttr(String activeAttr) { 
     this.activeAttr = activeAttr; 
    } 
} 

如果你不希望改變這個bean,那麼你就可以直接訪問悅目文件getter和檢查它是否工作正常。

<div data-sly-include="/apps/project/components/global.jsp"></div> 
<div data-sly-use.mininav="com.components.MiniNav" data-sly-unwrap> 
<div data-sly-list.navlist="${mininav.navList}"> 
    <li> 
    <p>${navlist.getFpath}</p> 
    <p>${navlist.getActiveattr}</p> 
    </li> 
</div> 

編輯:要根據意見

您不能訪問是私人類之外,通常使用公共getter方法做了解釋域多。但是,在使用點運算符後面的字段名稱時,您不直接訪問該字段,而是根據Java規範中的getter/setters命名來調用相應的getter方法。所以按照規範,你的getter和setter在bean中是錯誤的,因爲它沒有工作。

就像我上面提到的,你只能更改豆,你的代碼將正常工作。或者你可以保持你的bean的狀態,並改變Sightly代碼來讓事情發揮作用。

+0

非常感謝。它現在有效。我期待它能夠與變量名稱本身一起工作,不知道我們需要在視覺上調用getter。爲了直接引用鏈表,我沒有調用任何getter,但我直接調用了navList對象。但不知道爲什麼我們需要爲bean中的變量調用getter。 – RRN

+0

@RRN編輯了答案,解釋爲什麼它會這樣工作。 – rakhi4110