Giả sử tôi muốn tạo tập hợp các phần tử <rich:tab>
biến trong một thành phần <rich:tabPanel>
. Vì vậy, tôi đã cố gắng thực hiện theo cách đó:Có cách nào để tạo các yếu tố động <rich:tab> không?
<rich:tabPanel switchType="client" ...>
<ui:repeat value="#{myBean.myTabs}" var="tab">
<rich:tab name="#{tab.name}" label="#{tab.label}"/>
</ui:repeat>
</rich:tabPanel>
Nhưng nó không hoạt động, vì không có tab nào được hiển thị. Tôi cũng nhận được thông báo sau trong nhật ký:
j_id174: tab panel has no enabled or rendered tabs!
Vấn đề này dường như gặp phải bởi những người khác, ví dụ here.
Vì vậy, theo đề xuất của chủ đề trước, tôi đã thay thế <ui:repeat>
bởi <c:forEach>
nhưng sự cố vẫn xảy ra.
Tôi có một cách để giải quyết vấn đề này bằng cách sử dụng binding
thuộc tính của <rich:tabPanel>
phần của tôi:
<rich:tabPanel switchType="client" binding="#{tabNavigationBean.tabPanel}"
</rich:tabPanel>
và sau đó trong chương trình Java của tôi:
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);
}
}
Mã này đang làm việc.
Tuy nhiên, câu hỏi của tôi là biết tôi có thể giải quyết vấn đề của mình mà không cần sử dụng thuộc tính binding
(tức là 100% giải pháp XHTML thuần túy) không?
Thông tin kỹ thuật: Java 1.6, JSF 1.2 + Facelets, RichFaces 3.3 – romaintaz
Tôi không biết nếu điều này sẽ làm việc bất kỳ tốt hơn, nhưng thử? –
Naganalf
@Naganalf cũng đã cố gắng, không thành công: ( – romaintaz