JSF 2.0每次从selectOneMenu中选择一个项目时,如何显示不同的h:panelGroup
我有一个selectOneMenu,显示一些不同的东西类别:
我需要根据所选类别显示不同的panelGroup。 示例(选择第一项时需要显示此项)
我不知道该怎么做,因为我需要刷新页面。 有任何想法吗? Ajax可以帮助我吗? 如果是这样,有人可以告诉我怎么样? 我根本不熟悉。
这可以通过ajax轻松完成:
- 将
元素放在外部 - 在
嵌套
,并将外部
的id放在其render
属性中。 - 为每个内部
元素提供一个rendered
属性,仅当选择了相应的类别时,该属性才会计算为true。
在这种情况下你说“没有页面刷新”有两种方法可以实现这一点:
1. AJAX:您必须在selectOneMenu上附加带有onChange事件的cartInfo id
这将是reRender cartInfo panelGroup
例:
注意:您必须在panelGroup中具有某些属性才能在更改事件上显示为true。
2. JavaScript:您可以将您的Panel放在div中,并可以在onChange事件上再次显示/隐藏div。
例:
…
我非常接近解决方案,但出了点问题。 就像你说的那样做了所有的事情:第一和第二个问题都解决了。 问题是当我选择类别时,面板carInfo不会被渲染。
托管bean中的方法有问题吗? 由于某种原因,它不会被调用。 这就是我的代码目前看起来像Managed bean的方式
public void carSelectedEvent(ValueChangeEvent e) { String tmp = (String) e.getNewValue(); System.out.println("CALLED!!!!!"); if (selectedCategory.trim().equals("automobili")) { carCategorySelected = true; } else if (e.getNewValue().toString().contains("NEKRETNINE")) { } }
JSF页面选择
需要显示的JSF面板
...
当我导航到页面everithing似乎没问题,但我在控制台中注意到这条消息:
信息:警告:FacesMessage已入队,但可能尚未显示。 sourceId = null [severity =(ERROR 2),summary =(一个或多个资源的目标是’head’,但在视图中没有定义’head’组件。),detail =(一个或多个资源具有’head’的目标,但视图中没有定义’head’组件。)]
sourceId = null [severity =(ERROR 2),summary =(一个或多个资源的目标是’head’,但在视图中没有定义’head’组件。),detail =(一个或多个资源具有’head’的目标,但视图中没有定义’head’组件。)]
检查你的头标记,你可能错过了h前缀,写h:head,我用前缀h解决了问题。