【问题标题】:Prime faces dynamically adding tabsPrimefaces 动态添加标签
【发布时间】:2012-12-08 17:01:58
【问题描述】:

是否可以添加动态选项卡(不相关的选项卡)而无需使用素面重新加载页面。

我想做这样的事情

http://blog.favrik.com/examples/tabs/

我们将有一个菜单栏,当单击菜单时,将创建一个动态选项卡。 标签应该加载一个页面(xhtml),应该在不重新加载整个页面的情况下添加标签,并且不依赖任何托管 bean(因为我们试图最大程度地使用请求范围)

我已经看到了基于 bean 数据添加选项卡的示例。但在我的情况下,每个选项卡都是独立的(页面)

我已经从当前的 flex 应用程序中添加了一个示例图像,(尝试将其迁移到 JSF)关于我正在尝试做的事情。每个选项卡就像一个独立的屏幕/xhtml 文件。服务器中没有保存视图状态。单击菜单项时,会添加一个带有新屏幕内容的新选项卡。在页面重新加载时选项卡将丢失(我们可以忍受它,因为我们试图成为无状态)

【问题讨论】:

  • 如果您填充了一个表单,该表单将记录添加到选项卡后面的模型中,然后重新渲染 tabView,是的。您在 Primefaces 展示柜上看到过 Tabview 模型吗primefaces.org/showcase/ui/tabviewModel.jsf
  • @7SpecialGems,我认为 OP 不想将他的 TabView 建立在基于 bean 的模型上
  • 我之前已经发布了一个非常相似的问题的答案。这是你要找的吗? stackoverflow.com/questions/11961692/…
  • 嗨,正如 Kolossus 所说,我不是在寻找基于 bean 模型的 TabView。我们正在尝试构建一个无状态应用程序(使用请求范围,甚至不使用视图或会话范围),因此如果用户单击返回或刷新按钮,我们不在乎,我们只是加载默认页面。每个选项卡都应该加载一个独立的页面(xhtml)。如果我们有用户管理、帐户管理等菜单,当我单击用户管理菜单时,它将加载到一个选项卡中,如果我再次单击帐户管理,它将动态加载为另一个选项卡。每个选项卡都可以独立运行。

标签: ajax jsf tabs primefaces


【解决方案1】:

您可能需要详细说明您将在标签中放置的什么,从而进一步充实您的问题。但是试试这个:

  1. 将您的客户端TabView 绑定到支持bean 中的一个实例。在 xhmtl 方面:

    <p:tabView id="myTabPanel" binding="#{myBackingBean.tabView}" />
    

    在后台bean中

    TabView tabView = new TabView();
    //getter and setter
    
  2. 在方法中实现下面的 sn-p 以将 Tab 添加为 TabPanel 的子代

    TabView tabView = new TabView();
    Tab newTab = new Tab();             //Create new Tab
    newTab.setTitle("Tab Title");       //Set a basic property
    tabView.getChildren().add(newTab);  //Add as a child of the TabView
    
  3. 使用 primefaces RequestContext ajax 更新视图以反映新标签

      RequestContext context = RequestContext.getCurrentInstance();  
      context.update("myTabPanel");
    

或者,就像 7SpecialGems 指出的那样,您可以简单地将您的 TabView 绑定到一个支持 bean 列表,然后简单地向该列表添加一个新项目,使用 RequestContext 更新 TabView,如上面 3. 中所示,以反映变化

【讨论】:

  • 嗨,这可能有效,但这将是有状态的,我们需要使用视图或对话范围。但我希望它是无状态/请求范围,请参阅我在上面添加的评论,解释我正在尝试做什么
  • 如果是这种情况,那么我可以看到实现这一点的唯一方法是将选项卡数据持久保存在某处,并让支持 bean 根据请求将此信息加载到列表中(如果表视图是请求范围,那么这显然会通过刷新页面来实现,因为视图范围支持 bean 会将数据存储中的所有选项卡数据读取到列表中,并将其提供给选项卡视图)。如果您正在创建新的选项卡数据,它必须去某个地方。如果您不满意在会话中整理它(即使使用@ViewScoped),那么您就是将其推下一层。
  • @7SpecialGems,正如你所提到的,我认为我们必须走下一层。我不希望将视图信息保留在任何地方。我们正在将 Flex 应用程序迁移到 JSF 中进行 POC。在 flex 中,我们有 SuperTabNavigator 组件,并且在每个选项卡中,我们加载不同的屏幕/Flex 模块。我试图在 JSF 中模仿同样的东西。在 flex 的情况下,服务器对客户端选项卡或视图一无所知。希望我清楚地说明了我想要实现的目标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
相关资源
最近更新 更多