gpt4 book ai didi

jsf - 如何在 p :tabView component 中动态添加和删除选项卡

转载 作者:行者123 更新时间:2023-12-04 06:35:31 26 4
gpt4 key购买 nike

我正在尝试添加一个 PrimeFaces <p:tab>动态。在添加第二个选项卡时,我收到以下异常:

"java.lang.IllegalStateException: Component ID tab0 has already been found in the view".



我该如何解决这个问题?

这是 View 代码:
<h:form prependId="false">
<p:tabView id="tabview" dynamic="true" cache="false"
binding="#{testBean.tabView}"
activeIndex="#{testBean.activeTab}" >
<h:commandButton value="Close" action="#{testBean.removeTab}"/>
</p:tabView>
<h:commandButton value="Add Tab" action="#{testBean.addTab}"/>
</h:form>

这是 bean 代码:
public String addTab() {
String tabId="tab"+id;
System.out.println("Gen Id: "+tabId);
tab = new Tab();
tab.setTitle("Title: "+tabId);
tab.setId(tabId);

System.out.println("Tab Id: "+tab.getId());
tabView.getChildren().add(id,this.tab);
id++;
return "tabtest.jsf";
}

public String removeTab() {
tabView.getChildren().remove(activeTab);
return "tabtest.jsf";
}

最佳答案

如果一切都可以在 View 中完成,请不要手动创建组件。如果 bean 的范围比请求范围更广,则此构造将失败。另见例如Binding attribute causes duplicate component ID found in the view

按照展示示例“TabView with Model ”,它允许您通过健全的模型和 <p:tabView value="..." var="..."> 动态填充选项卡。像 <ui:repeat>/<h:dataTable> .

例如。这种看法

<h:form>
<p:tabView value="#{bean.tabs}" var="tab">
<p:tab title="#{tab.title}">
#{tab.content}
<p:commandButton value="Close" action="#{bean.remove(tab)}" update="@form" />
</p:tab>
</p:tabView>
<p:commandButton value="Add Tab" action="#{bean.add}" update="@form" />
</h:form>

使用这个 Controller
@ManagedBean
@ViewScoped
public class Bean implements Serializable {

private List<Tab> tabs;

@PostConstruct
public void init() {
tabs = new ArrayList<>();
}

public void add() {
tabs.add(new Tab("tab" + tabs.size(), "some content"));
}

public void remove(Tab tab) {
tabs.remove(tab);
}

public List<Tab> getTabs() {
return tabs;
}

}

和这个模型
public class Tab {

private String title;
private String content;

public Tab(String title, String content) {
this.title = title;
this.content = content;
}

public String getTitle() {
return title;
}

public String getContent() {
return content;
}

}

关于jsf - 如何在 p :tabView component 中动态添加和删除选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7308535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com