gpt4 book ai didi

java - 如何多次手动实例化 viewscoped bean

转载 作者:行者123 更新时间:2023-12-02 13:22:00 26 4
gpt4 key购买 nike

我正在使用 JSF 构建一个单页应用程序,如下所示:

home page preview

左侧的菜单是动态生成的,单击其中一个子菜单会创建一个选项卡,我在其中显示 <ui:include> 中的内容。 .

菜单和选项卡代码:

<p:layoutUnit position="west" resizable="false" size="210">
<h:form id="menu_form">
<p:panelMenu style="width:200px" model="#{homeView.menu}" />
</h:form>
</p:layoutUnit>

<p:layoutUnit id="center-layout" position="center">

<p:tabView id="tabss" style="font-size: 15px"
activeIndex="#{homeView.index}" scrollable="true">
<p:ajax event="tabClose" listener="#{homeView.onTabClose}"
update="tabss" />
<p:ajax event="tabChange" listener="#{homeView.onTabChange}"
update="tabss" />

<c:forEach items="#{homeView.openTabs}" var="otab">
<p:tab title="#{otab.title}" closable="true"
style="font-size: 15px" rendered="#{otab.open}">
<p:scrollPanel mode="native" styleClass="scrollPanels">
<ui:include src="#{otab.content}" />
</p:scrollPanel>
</p:tab>
</c:forEach>
</p:tabView>
</p:layoutUnit>

主页的支持 bean:

@ManagedBean
@ViewScoped
public class HomeView {

private List<Tab> tabs;
private List<Tab> openTabs;
private int index;
private TabService tabService;
private MenuService menuService;
private MenuModel menu;
@ManagedProperty("#{loginView}")
private LoginView loginView;

@PostConstruct
public void init() {
tabService = new TabService();
menuService = new MenuService();
tabs = menuService.loadTabs(loginView.getUtilisateur().getProfile());
openTabs = new ArrayList<Tab>();
menu = menuService.loadMenu(loginView.getUtilisateur().getProfile());
}

public void addTab(String title) {
if (tabService.check(openTabs, title)) {
openTabs = tabService.addTab(tabs, openTabs, title);
}
if (tabService.getIndex(openTabs, title) != -1) {
index = tabService.getIndex(openTabs, title);
}
}

public void onTabClose(TabCloseEvent event) {
String title = event.getTab().getTitle();
String ti = openTabs.get(index).getTitle();
openTabs = tabService.closeTab(openTabs, title);
if (ti.equals(title)) {
index = tabService.setIndex(index);
} else {
index = tabService.setIndex(openTabs, ti);
}
}

public void onTabChange(TabChangeEvent event) {
index = tabService.getIndex(openTabs, event.getTab().getTitle());
}
// Getters and setters

我应该注意到,单击子菜单会调用方法 addTab(Title)打开选项卡
每个包含的页面(选项卡中显示的页面)都使用自己的 viewscoped bean,该 bean 在关闭选项卡后会被销毁(请参阅上面的代码)。

有问题:

在上面的屏幕截图中,我显示了一个选项卡,其中显示 <p:dataTable> 中的搜索结果。 ,我想要的行为是:
每当从数据表中选择一个元素时,我想打开一个选项卡,在其中显示有关该元素的更多信息。对我来说重要的是能够同时打开多个选项卡(显示有关某个元素的更多信息)。
我的想法是创建一个 xhtml 来执行显示部分,并创建一个 viewscoped bean 来支持所述页面。那么有没有办法手动实例化所述 bean(每次用户单击按钮时),然后用相应的数据填充它,这样我就可以多次重复使用同一页面?
谢谢

最佳答案

作为解决方法,您可以为多个信息页面请求使用相同的 View 范围 bean。当您打开信息页面时,您可以传递标识符作为参数。例如,1,2 分别表示信息页面一和信息页面二,并通过标识符将任何关联数据存储在集合中,并相应地在页面中进行变量绑定(bind)。

关于java - 如何多次手动实例化 viewscoped bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43528126/

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