Primefaces选项卡,TabMenu,TabView,TagCloud
Primefaces实现为您提供了大量用于不同目的的组件。
本教程将重点介绍以下这些组件:
选项卡:是其他Primefaces组件使用的通用容器组件,例如tabView和AccordionPanel。
TabMenu:是一个导航组件,将菜单项显示为选项卡。
TabView:是一个容器组件,用于将选项卡中的内容分组。
TagCloud:显示具有不同强度的标签的集合。
让我们开始描述这些组件并查看它们的特色方面。
标签基本信息
如前所述,Tab不是可以单独使用的单独组件。
它与AccordionPanel和TabView独立使用。
| Tag | Tab |
|---|---|
| Component Class | org.primefaces.component.TabView.Tab |
| Component Type | org.primefaces.component.Tab |
| Component Family | org.primefaces.component |
标签属性
| Name | Default | Type | Description |
|---|---|---|---|
| id | null | String | Unique identifier of the component. |
| rendered | true | Boolean | Boolean value to specify the rendering of the component, when set to false component will not be rendered. |
| binding | null | Object | An el expression that maps to a server side UIComponent instance in a backing bean. |
| title | null | Boolean | Title text of the tab |
| titleStyle | null | String | Inline style of the tab. |
| titleStyleClass | null | String | Style class of the tab. |
| disabled | false | Boolean | Disables tab element. |
| closable | false | Boolean | Makes the tab closable when enabled. |
| titletip | null | String | Tooltip of the tab header. |
您已经有使用AccordionPanel的经验,接下来的小节将讨论TabView。
TabMenu基本信息
TabMenu是一个导航组件,将菜单项显示为选项卡。
| Tag | TabMenu |
|---|---|
| Component Class | org.primefaces.component.tabmenu.TabMenu |
| Component Type | org.primefaces.component.TabMenu |
| Component Family | org.primefaces.component |
| Renderer Type | org.primefaces.component.TabMenuRenderer |
| Renderer Class | org.primefaces.component.tabmenu.TabMenuRenderer |
TabMenu属性
| Name | Default | Type | Description |
|---|---|---|---|
| id | null | String | Unique identifier of the component |
| rendered | true | Boolean | Boolean value to specify the rendering of the component, when set to false component will not be rendered. |
| binding | null | Object | An el expression that maps to a server side UIComponent instance in a backing bean |
| model | null | MenuModel | MenuModel instance to build menu dynamically. |
| style | null | String | Inline style of the component. |
| styleClass | null | String | Style class of the component. |
| activeIndex | 0 | Integer | Index of the active tab. |
| widgetVar | null | String | Name of the client side widget. |
TabMenu入门
TabMenu需要menuitems作为子组件,每个menuitem都呈现为一个选项卡。
Menuitem可用于发起ajax,non-ajax和GET请求,因为它已经讨论过不同类型的Menu组件。
index.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:500px;">
<p:growl id="message"></p:growl>
<p:tabMenu id="tabMenu" activeIndex="#{tabMenuManagedBean.index}">
<p:menuitem value="GET Request" url="https://www.theitroad.local/dev/primefaces"></p:menuitem>
<p:menuitem value="Ajax Request" action="#{tabMenuManagedBean.doSomeWork}" update="tabMenu message"></p:menuitem>
</p:tabMenu>
</h:form>
</html>
TabMenuManagedBean.java
package com.theitroad.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class TabMenuManagedBean {
private int index = 0;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String doSomeWork(){
//Do some work
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Some Work Achieved"));
//Change the index that TabMenu refers as activated tab
index = 1;
return "";
}
}
这是上述示例的详细说明:
菜单项可用于生成GET,Ajax,非Ajax和内部应用程序请求。
TabMenu使用activeIndex属性来确定显示组件后应呈现哪个选项卡。
TabView基本信息
TabView是一个容器组件,用于将选项卡中的内容分组。
| Tag | TabView |
|---|---|
| Component Class | org.primefaces.component. tabview.TabView |
| Component Type | org.primefaces.component.TabView |
| Component Family | org.primefaces.component |
| Renderer Type | org.primefaces.component.TabViewRenderer |
| Renderer Class | org.primefaces.component.tabview.TabViewRenderer |
TabView属性
| Name | Default | Type | Description |
|---|---|---|---|
| id | null | String | Unique identifier of the component. |
| rendered | true | Boolean | Boolean value to specify the rendering of the component, when set to false component will not be rendered. |
| binding | null | Object | An el expression that maps to a server side UIComponent instance in a backing bean. |
| widgetVar | null | String | Variable name of the client side widget. |
| activeIndex | 0 | Integer | Index of the active tab. |
| effect | null | String | Name of the transition effect. |
| effectDuration | null | String | Duration of the transition effect. |
| dynamic | false | Boolean | Enables lazy loading of inactive tabs. |
| cache | true | Boolean | When tab contents are lazy loaded by ajax toggleMode, caching only retrieves the tab contents once and subsequent toggles of a cached tab does not communicate with server. If caching is turned off, tab contents are reloaded from server each time tab is clicked. |
| onTabChange | null | String | Client side callback to execute when a tab is clicked. |
| onTabShow | null | String | Client side callback to execute when a tab is shown. |
| onTabClose | null | String | Client side callback to execute on tab close. |
| style | null | String | Inline style of the main container. |
| styleClass | null | String | Style class of the main container. |
| var | null | String | Name of iterator to refer an item in collection. |
| value | null | Object | Collection model to display dynamic tabs. |
| orientation | top | String | Orientation of tab headers. |
| dir | ltr | String | Defines text direction, valid values are ltr and rtl. |
| scrollable | false | Boolean | When enabled, tab headers can be scrolled horizontally instead of wrapping. |
| prependId | true | Boolean | TabView is a naming container thus prepends its id to its children by default, a false value turns this behavior off except for dynamic tabs. |
TabView入门
TabView需要再显示一个子选项卡组件。
也可以使用" title"构面来定义标题。
tabView.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:500px;">
<p:growl id="message"></p:growl>
<p:tabView activeIndex="#{tabViewManagedBean.index}">
<p:tab title="Tab#1">
<p:outputLabel value="Content goes here ! Message # 1"></p:outputLabel>
</p:tab>
<p:tab title="Tab#2">
<p:outputLabel value="Content goes here ! Message # 2"></p:outputLabel>
</p:tab>
<p:tab title="Tab#3">
<p:outputLabel value="Content goes here ! Message # 3"></p:outputLabel>
</p:tab>
</p:tabView>
</h:form>
</html>
TabViewManagedBean.java
package com.theitroad.prime.faces.beans;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class TabViewManagedBean {
private int index = 0;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
TabView –动态选项卡
默认情况下,由于动态属性设置为false,所有选项卡内容都呈现给客户端。
如果该属性的值被设置为true仅在活动选项卡的内容向客户端呈现以及当选择不活动选项卡头,内容加载AJAX。
以下示例显示了将set动态属性设置为false的影响。
tabView.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:500px;">
<p:growl id="message"></p:growl>
<p:tabView activeIndex="#{tabViewManagedBean.index}" dynamic="false">
<p:tab title="Tab#1">
<p:outputLabel value="#{tabViewManagedBean.messageNum1}"></p:outputLabel>
</p:tab>
<p:tab title="Tab#2">
<p:outputLabel value="#{tabViewManagedBean.messageNum2}"></p:outputLabel>
</p:tab>
</p:tabView>
</h:form>
</html>
TabViewManagedBean.java
package com.theitroad.prime.faces.beans;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class TabViewManagedBean {
private int index = 0;
private String messageNum1 = "Tab#1 Content Is Loaded";
private String messageNum2 = "Tab#2 Content Is Loaded";
public String getMessageNum1() {
System.out.println(messageNum1);
return messageNum1;
}
public void setMessageNum1(String messageNum1) {
this.messageNum1 = messageNum1;
}
public String getMessageNum2() {
System.out.println(messageNum2);
return messageNum2;
}
public void setMessageNum2(String messageNum2) {
this.messageNum2 = messageNum2;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
但是当dynamic设置为true时,结果将如下所示:
您已经注意到,与动态属性设置为false时发生的情况不同,仅加载了活动标签的内容。
动态加载的标签页默认情况下会缓存其内容,因为重新缓存标签页后,重新激活标签页不会导致Ajax请求。
如果您想在每次选择选项卡时重新加载选项卡的内容,请通过将cache属性设置为false关闭缓存。
TabView –效果
可以通过提供effect和effectDuration属性来控制内容显示的效果。
EffectDuration指定效果的速度,"慢","正常"和"快速"仅是适用的值。
tabViewEffects.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:500px;">
<p:growl id="message"></p:growl>
<p:tabView activeIndex="#{tabViewManagedBean.index}" dynamic="true" effect="fade" effectDuration="fast">
<p:tab title="Tab#1">
<p:outputLabel value="#{tabViewManagedBean.messageNum1}"></p:outputLabel>
</p:tab>
<p:tab title="Tab#2">
<p:outputLabel value="#{tabViewManagedBean.messageNum2}"></p:outputLabel>
</p:tab>
</p:tabView>
</h:form>
</html>
TabView – Ajax行为事件
TabView组件支持两种可以用ajax触发的事件类型,分别更改和关闭选项卡时会执行tabChange和tabClose。
tabViewAjaxEvents.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form id="form" style="width:500px;">
<p:growl id="message"></p:growl>
<p:tabView id="tabView" activeIndex="#{tabViewManagedBean.index}">
<p:ajax event="tabChange" listener="#{tabViewManagedBean.onTabChanged}" update="@previous"></p:ajax>
<p:ajax event="tabClose" listener="#{tabViewManagedBean.onTabClosed}" update="@form:message"></p:ajax>
<p:tab title="Tab#1" closable="true">
<p:outputLabel value="#{tabViewManagedBean.messageNum1}"></p:outputLabel>
</p:tab>
<p:tab title="Tab#2" closable="true">
<p:outputLabel value="#{tabViewManagedBean.messageNum2}"></p:outputLabel>
</p:tab>
</p:tabView>
</h:form>
</html>
TabViewManagedBean.java
package com.theitroad.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.TabChangeEvent;
import org.primefaces.event.TabCloseEvent;
@ManagedBean
@SessionScoped
public class TabViewManagedBean {
private int index = 0;
private String messageNum1 = "Tab#1 Content Is Loaded";
private String messageNum2 = "Tab#2 Content Is Loaded";
public String getMessageNum1() {
System.out.println(messageNum1);
return messageNum1;
}
public void setMessageNum1(String messageNum1) {
this.messageNum1 = messageNum1;
}
public String getMessageNum2() {
System.out.println(messageNum2);
return messageNum2;
}
public void setMessageNum2(String messageNum2) {
this.messageNum2 = messageNum2;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public void onTabChanged(TabChangeEvent e){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Tab With Index :: "+e.getTab().getTitle()+" Is Changed"));
}
public void onTabClosed(TabCloseEvent e){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Tab With Index :: "+e.getTab().getTitle()+" Is Closed"));
}
}
以下是上述示例的详细说明:
由于TabView组件是容器,因此不适用于在不引用父组件的情况下直接更新消息组件的情况。
使用Primefaces搜索表达式可以实现这一点,就像使用@previous和@form:message一样。要关闭启用标签页,应提供"可关闭"属性,其值应为true。
一旦关闭可关闭的标签页,就会触发onClose事件。
停用非活动标签后,将触发onChange事件。
处理ajax onChange事件时,将为处理程序方法传递TabChangeEvent的实例。
处理ajax onClose事件时,将为处理程序方法传递TabCloseEvent的实例。
TabView –客户端API
TabView组件可以使用客户端API进行控制。
您可以定义JavaScript函数,以针对TabView组件调用以下所有预定义的方法。
| Method | Params | Return Type | Description |
|---|---|---|---|
| select(index) | index: Index of tab to display | void | Activates tab with given index |
| selectTab(index) | index: Index of tab to display | void | (Deprecated, use select instead) Activates tab with given index |
| disable(index) | index: Index of tab to disable | void | Disables tab with given index |
| enable(index) | index: Index of tab to enable | void | Enables tab with given index |
| remove(index) | index: Index of tab to remove | void | Removes tab with given index |
| getLength() | – | Number | Returns the number of tabs |
| getActiveIndex() | – | Number | Returns index of current tab |
tabViewClientSideAPI.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
<script>
function showTab(index){
PF('tabView').select(index);
}
</script>
</h:head>
<h:form id="form" style="width:500px;">
<p:growl id="message"></p:growl>
<p:tabView id="tabView" activeIndex="#{tabViewManagedBean.index}" widgetVar="tabView">
<p:tab title="Tab#1" closable="true">
<p:outputLabel value="#{tabViewManagedBean.messageNum1}"></p:outputLabel>
</p:tab>
<p:tab title="Tab#2" closable="true">
<p:outputLabel value="#{tabViewManagedBean.messageNum2}"></p:outputLabel>
</p:tab>
</p:tabView>
<p:commandButton value="Show Tab 1" type="button" onclick="showTab(0);"></p:commandButton>
<p:commandButton value="Show Tab 2" type="button" onclick="showTab(1);"></p:commandButton>
</h:form>
</html>
您必须注意以下重要事项:
TabView组件内的选项卡已从索引零开始。
PF('WidgetVar')。
<<方法名称>>(<<参数是否存在>>)表达式用于调用相关方法。
TabView –方向和可滚动选项卡
您可以分别使用Orientation和scrollable属性来控制Tab方向和选项卡标题的形式。
有四种不同的方向可供选择;顶部(默认),左侧,右侧和底部。
同时,可滚动功能使您的标签页保持水平对齐,并提供导航按钮以访问这些隐藏的标签页。
tabViewOrientationScrollable.xhtml
<html xmlns="https://www.w3.org/1999/xhtml" xmlns:ui="https://java.sun.com/jsf/facelets" xmlns:h="https://java.sun.com/jsf/html" xmlns:f="https://java.sun.com/jsf/core" xmlns:p="https://primefaces.org/ui"> <h:head> <script name="jquery/jquery.js" library="primefaces"></script> </h:head> <h:form style="width:500px;"> <p:growl id="message"></p:growl> <p:outputLabel value="Orientation Example"></p:outputLabel> <p:tabView orientation="left"> <p:tab title="Tab#1"> Tab#1 </p:tab> <p:tab title="Tab#2"> Tab#2 </p:tab> <p:tab title="Tab#3"> Tab#3 </p:tab> <p:tab title="Tab#4"> Tab#4 </p:tab> </p:tabView> <p:separator <p:outputLabel value="Scrollable Example"></p:outputLabel> <p:tabView scrollable="true"> <p:tab title="Tab#1"> Tab#1 </p:tab> <p:tab title="Tab#2"> Tab#2 </p:tab> <p:tab title="Tab#3"> Tab#3 </p:tab> <p:tab title="Tab#4"> Tab#4 </p:tab> <p:tab title="Tab#5"> Tab#5 </p:tab> <p:tab title="Tab#6"> Tab#6 </p:tab> <p:tab title="Tab#7"> Tab#7 </p:tab> <p:tab title="Tab#8"> Tab#8 </p:tab> </p:tabView> </h:form> </html>
TabView –客户端回调
TabView为客户端定义了三个回调。
单击不活动的选项卡时执行onTabChange,当不活动的选项卡变为活动状态以显示时执行onTabShow,关闭可关闭的选项卡则执行onTabClose。
所有这些回调都将index参数作为tab的索引。
tabViewClientSideCallbacks.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
<script>
function onTabChange(){
alert('Tab Is Changed');
}
function onTabShow(){
alert('Tab Is Shown');
}
function onTabClose(){
alert("Tab Is Closed");
}
</script>
</h:head>
<h:form id="form" style="width:500px;">
<p:growl id="message"></p:growl>
<p:tabView id="tabView" activeIndex="#{tabViewManagedBean.index}" onTabChange="onTabChange()" onTabClose="onTabClose()" onTabShow="onTabShow()">
<p:tab title="Tab#1" closable="true">
<p:outputLabel value="#{tabViewManagedBean.messageNum1}"></p:outputLabel>
</p:tab>
<p:tab title="Tab#2" closable="true">
<p:outputLabel value="#{tabViewManagedBean.messageNum2}"></p:outputLabel>
</p:tab>
</p:tabView>
</h:form>
</html>
TagCloud基本信息
TagCloud显示具有不同优势的标签集合。
| Tag | TagCloud |
|---|---|
| Component Class | org.primefaces.component.tagcloud.TagCloud |
| Component Type | org.primefaces.component.TagCloud |
| Component Family | org.primefaces.component |
| Renderer Type | org.primefaces.component.TagCloudRenderer |
| Renderer Class | org.primefaces.component.tagcloud.TagCloudRenderer |
TagCloud属性
| Name | Default | Type | Description |
|---|---|---|---|
| id | null | String | Unique identifier of the component |
| rendered | true | Boolean | Boolean value to specify the rendering of the component, when set to false component will not be rendered. |
| binding | null | Object | An el expression that maps to a server side UIComponent instance in a backing bean |
| widgetVar | null | String | Name of the client side widget. |
| model | null | TagCloudModel | Backing tag cloud model. |
| style | null | String | Inline style of the container element. |
| styleClass | null | String | Style class of the container element. |
TagCloud入门
要开始使用TagCloud组件,应在您自己的后端中提供TagCloud模型。
TagCloudModel已关联并绑定到TagCloudItem的集合中,并且对于绑定的每个TagCloudItem,都应指定标签的名称和强度。
另外,您也可以提供一个字符串,该字符串表示TagCloudItem的网址以用于导航。
tagCloud.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:500px;">
<p:tagCloud model="#{tagCloudManagedBean.tagCloud}"></p:tagCloud>
</h:form>
</html>
TagCloudManagedBean.java
package com.theitroad.prime.faces.beans;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.model.tagcloud.DefaultTagCloudItem;
import org.primefaces.model.tagcloud.DefaultTagCloudModel;
import org.primefaces.model.tagcloud.TagCloudItem;
import org.primefaces.model.tagcloud.TagCloudModel;
@ManagedBean
@SessionScoped
public class TagCloudManagedBean {
private TagCloudModel tagCloud = new DefaultTagCloudModel();
public TagCloudManagedBean(){
//Create set of TagCloudItem (s)
TagCloudItem primefaces = new DefaultTagCloudItem("Primefaces","https://www.theitroad.local/dev/primefaces", 10);
TagCloudItem hibernate = new DefaultTagCloudItem("Hibernate","https://www.theitroad.local/dev/hibernate", 5);
TagCloudItem apachePluto = new DefaultTagCloudItem("Apache Pluto", 3);
TagCloudItem spring = new DefaultTagCloudItem("Spring", 4);
TagCloudItem grails = new DefaultTagCloudItem("Grails", 5);
TagCloudItem apacheLvy = new DefaultTagCloudItem("Apache lvy", 6);
//Add created TagCloudItems into your TagCloudModel
this.tagCloud.addTag(primefaces);
this.tagCloud.addTag(hibernate);
this.tagCloud.addTag(apachePluto);
this.tagCloud.addTag(spring);
this.tagCloud.addTag(grails);
this.tagCloud.addTag(apacheLvy);
}
public TagCloudModel getTagCloud() {
return tagCloud;
}
public void setTagCloud(TagCloudModel tagCloud) {
this.tagCloud = tagCloud;
}
}
您已经注意到,Hibernate和Grails是最强大的标签。
Primefaces和Hibernate标签是可单击的,通过这样做,您将导航到内部的关联URL。
选择标签
可以使用selectajax行为来选择TagCloudItem,其中一个重要条件是所选的TagCloudItem的URL值应为null。
对于那些不为null的url值,它们将导致完成url导航。
tagCloud.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:500px;">
<p:growl id="message"></p:growl>
<p:tagCloud model="#{tagCloudManagedBean.tagCloud}">
<p:ajax event="select" listener="#{tagCloudManagedBean.selectListener}" update="message">
</p:ajax>
</p:tagCloud>
</h:form>
</html>
TagCloudManagedBean.java
package com.theitroad.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.tagcloud.DefaultTagCloudItem;
import org.primefaces.model.tagcloud.DefaultTagCloudModel;
import org.primefaces.model.tagcloud.TagCloudItem;
import org.primefaces.model.tagcloud.TagCloudModel;
@ManagedBean
@SessionScoped
public class TagCloudManagedBean {
private TagCloudModel tagCloud = new DefaultTagCloudModel();
public TagCloudManagedBean(){
//Create set of TagCloudItem (s)
TagCloudItem primefaces = new DefaultTagCloudItem("Primefaces","https://www.theitroad.local/dev/primefaces", 10);
TagCloudItem hibernate = new DefaultTagCloudItem("Hibernate","https://www.theitroad.local/dev/hibernate", 5);
TagCloudItem apachePluto = new DefaultTagCloudItem("Apache Pluto", 3);
TagCloudItem spring = new DefaultTagCloudItem("Spring", 4);
TagCloudItem grails = new DefaultTagCloudItem("Grails", 5);
TagCloudItem apacheLvy = new DefaultTagCloudItem("Apache lvy", 6);
//Add created TagCloudItems into your TagCloudModel
this.tagCloud.addTag(primefaces);
this.tagCloud.addTag(hibernate);
this.tagCloud.addTag(apachePluto);
this.tagCloud.addTag(spring);
this.tagCloud.addTag(grails);
this.tagCloud.addTag(apacheLvy);
}
public TagCloudModel getTagCloud() {
return tagCloud;
}
public void setTagCloud(TagCloudModel tagCloud) {
this.tagCloud = tagCloud;
}
public void selectListener(SelectEvent e){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(((TagCloudItem)e.getObject()).getLabel() + " Is Selected"));
}
}
TagCloud API
可以使用以下API控制TagCloud模型组件。
| Method | Description |
|---|---|
| List<TagCLoudItem> getTags() | Returns all tags in model. |
| void addTag(TagCloudItem item) | Adds a tag. |
| void removeTag(TagCloudItem item) | Removes a tag. |
| void clear() | Removes all tags. |
您可以通过针对模型调用getTags()列出与模型关联的所有标签,如下所示:
tagCloud.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
<script>
function printAllTags(){
alert(PF('tagCloudModel').getTags());
}
</script>
</h:head>
<h:form style="width:500px;">
<p:growl id="message" ></p:growl>
<p:tagCloud widgetVar="tagCloudModel" model="#{tagCloudManagedBean.tagCloud}">
<p:ajax event="select" listener="#{tagCloudManagedBean.selectListener}" update="message">
</p:ajax>
</p:tagCloud>
<p:commandButton value="List All Tags" action="#{tagCloudManagedBean.listAllTags}" update="message"></p:commandButton>
</h:form>
</html>
TagCloudManagedBean.java
package com.theitroad.prime.faces.beans;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.tagcloud.DefaultTagCloudItem;
import org.primefaces.model.tagcloud.DefaultTagCloudModel;
import org.primefaces.model.tagcloud.TagCloudItem;
import org.primefaces.model.tagcloud.TagCloudModel;
@ManagedBean
@SessionScoped
public class TagCloudManagedBean {
private TagCloudModel tagCloud = new DefaultTagCloudModel();
public TagCloudManagedBean(){
//Create set of TagCloudItem (s)
TagCloudItem primefaces = new DefaultTagCloudItem("Primefaces","https://www.theitroad.local/dev/primefaces", 10);
TagCloudItem hibernate = new DefaultTagCloudItem("Hibernate","https://www.theitroad.local/dev/hibernate", 5);
TagCloudItem apachePluto = new DefaultTagCloudItem("Apache Pluto", 3);
TagCloudItem spring = new DefaultTagCloudItem("Spring", 4);
TagCloudItem grails = new DefaultTagCloudItem("Grails", 5);
TagCloudItem apacheLvy = new DefaultTagCloudItem("Apache lvy", 6);
//Add created TagCloudItems into your TagCloudModel
this.tagCloud.addTag(primefaces);
this.tagCloud.addTag(hibernate);
this.tagCloud.addTag(apachePluto);
this.tagCloud.addTag(spring);
this.tagCloud.addTag(grails);
this.tagCloud.addTag(apacheLvy);
}
public TagCloudModel getTagCloud() {
return tagCloud;
}
public void setTagCloud(TagCloudModel tagCloud) {
this.tagCloud = tagCloud;
}
public void selectListener(SelectEvent e){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(((TagCloudItem)e.getObject()).getLabel() + " Is Selected"));
}
public String listAllTags(){
List<TagCloudItem> tags = this.tagCloud.getTags();
String message = "";
for(TagCloudItem item : tags){
message = message + ","+item.getLabel();
}
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Your Tags Are: "+message));
return "";
}
}

