假設我想在<rich:tabPanel>
組件中創建一個變量集合<rich:tab>
。所以我試圖這樣做:有沒有辦法動態創建<rich:tab>元素?
<rich:tabPanel switchType="client" ...>
<ui:repeat value="#{myBean.myTabs}" var="tab">
<rich:tab name="#{tab.name}" label="#{tab.label}"/>
</ui:repeat>
</rich:tabPanel>
但它沒有工作,因爲沒有製表符。我也有在日誌中以下消息:
j_id174: tab panel has no enabled or rendered tabs!
這個問題似乎被別人的人會遇到,例如here。
正如前面的線程所建議的那樣,我將<ui:repeat>
替換爲<c:forEach>
,但問題仍然存在。
我有辦法用我的<rich:tabPanel>
組件的binding
屬性來解決這個問題:
<rich:tabPanel switchType="client" binding="#{tabNavigationBean.tabPanel}"
</rich:tabPanel>
,然後在我的Java bean:
private HtmlTabPanel tabPanel; // + getter and setter
public void setTabPanel(HtmlTabPanel tabPanel) {
this.tabPanel = tabPanel;
if (tabPanel != null) {
createTabs();
}
}
private void createTabs() {
Application application = FacesContext.getCurrentInstance().getApplication();
HtmlTab newTab = null;
for (DedicatedPageTab dpt : getDedicatedPageTabs()) {
newTab = (HtmlTab) application.createComponent(HtmlTab.COMPONENT_TYPE);
newTab.setLabel(dpt.getLabel());
newTab.setName(dpt.getName());
tabPanel.getChildren().add(newTab);
}
}
此代碼工作。
但是,我的問題是要知道我是否可以使用binding
屬性(即100%純XHTML解決方案)解決我的問題而不是?
技術信息:Java的1.6,JSF 1.2 +的Facelets,RichFaces的3.3 – romaintaz 2010-10-26 09:13:14
我不知道這是否會工作更好,但嘗試? –
Naganalf
2010-10-26 18:34:32
@Naganalf也嘗試過,但沒有成功:( – romaintaz 2010-10-26 18:37:45