假设我想在<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