本文所写的例子是针对这篇帖子的。
我们需要两个managed Bean,一个在request中,一个在Session中。在Session中的managed Bean用来存储菜单的状态。如果你使用Seam,那么实现这个例子会更加简单。
我们需要记住两个东西:
1、哪个菜单组被展开了
2、哪个菜单被点击了
记住被电击的菜单项,我们使用selectedChild=”#{menuState.selectedMenuItem}”来实现。
记住哪个菜单组被展开了,则通过菜单组的属性来实现,这个属性对应的参数值是自动被记忆的。
这里我在action方法里面写的是页面的viewId,也就是页面的相对路径。当然如果写标准的导航规则也是可以的。
<h:form>
<rich:panelMenu style="width:200px" mode="client"
selectedChild="#{menuState.selectedMenuItem}"
iconExpandedGroup="disc"
iconCollapsedGroup="disc"
iconExpandedTopGroup="chevronUp"
iconGroupTopPosition="right"
iconCollapsedTopGroup="chevronDown"
iconCollapsedTopPosition="right" >
<rich:panelMenuGroup label="Group 1" id="group1"
value="#{menuState.menu['group1']}">
<rich:panelMenuItem label="Item 1" id="group1_item1"
actionListener="#{menuBean.select}"
action="/select.xhtml"
mode="server"/>
<rich:panelMenuItem label="Item 2" id="group1_item2"
actionListener="#{menuBean.select}"
action="/select.xhtml"
mode="server"/>
<rich:panelMenuItem label="Item 3" id="group1_item3"
actionListener="#{menuBean.select}"
action="/select.xhtml"
mode="server"/>
</rich:panelMenuGroup>
<rich:panelMenuGroup label="Group 2" id="group2"
value="#{menuState.menu['group2']}" >
<rich:panelMenuItem label="Item 1" id="group2_item1"
actionListener="#{menuBean.select}"
action="/select.xhtml"
mode="server"/>
<rich:panelMenuItem label="Item 2" id="group2_item2"
actionListener="#{menuBean.select}"
action="/select.xhtml"
mode="server"/>
<rich:panelMenuItem label="Item 3" id="group2_item3"
actionListener="#{menuBean.select}"
action="/select.xhtml"
mode="server"/>
</rich:panelMenuGroup>
</rich:panelMenu>
</h:form>
request范围内的managed Bean:MenuBean
package test;
import javax.faces.event.ActionEvent;
public class MenuBean {
private MenuState menuState;
public MenuState getMenuState() {
return menuState;
}
public void setMenuState(MenuState menuState) {
this.menuState = menuState;
}
public MenuBean() {}
public void select (ActionEvent event) {
menuState.setSelectedMenuItem(event.getComponent().getId());
}
}
在select监听器中,我们记住了哪个菜单项被点击了。当我们返回到这个页面的时候,被点击的菜单项就会依照selectedChild=”#{menuState.selectedMenuItem}”恢复被点击状态。
Session范围内的managed Bean:MenuState,用户保存菜单组的展开状态
package test;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
public class MenuState {
private Map <String, Boolean> menu;
private String selectedMenuItem;
public String getSelectedMenuItem() {
return selectedMenuItem;
}
public Map<String, Boolean> getMenu() {
return menu;
}
public void setMenu(Map<String, Boolean> menu) {
this.menu = menu;
}
public void setSelectedMenuItem(String selectedMenuItem) {
this.selectedMenuItem = selectedMenuItem;
}
public MenuState() {
}
@PostConstruct
public void init () {
menu = new HashMap <String, Boolean>();
menu.put("group1", false);
menu.put("group2", false);
}
}
rich:panelMenuGroup的value属性被绑定到了一个HashMap上,其展开状态的值会自动保存进这个变量。
JSF配置文件:
<managed-bean>
<managed-bean-name>menuBean</managed-bean-name>
<managed-bean-class>test.MenuBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>menuState</property-name>
<property-class>test.MenuState</property-class>
<value>#{menuState}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>menuState</managed-bean-name>
<managed-bean-class>test.MenuState</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
分享到:
相关推荐
`<rich:tree>`是富客户端界面中的一个交互式组件,可以展示具有层级关系的数据,用户可以通过展开、折叠节点来探索数据结构。 在`<rich:treeNode>`的使用中,我们需要指定几个关键属性来定义节点的行为和外观。这些...
在本文中,我们将深入探讨`rich:fileUpload`和`a4j:mediaOutput`这两个组件在实际开发中的使用,特别是在处理文件上传和媒体输出时的关键知识点。它们都是RichFaces库的一部分,这是一个强大的JavaServer Faces (JSF...
`<a4j:support>`监听`onkeyup`事件,当用户在`h:inputText`中输入时,会触发`reRender="order"`,使`<rich:message>`组件和`<h:outputText>`组件更新,显示当前输入的验证状态。 6. **处理用户输入** `<a4j:...
### <rich:listShuttle>标签使用 在JavaServer Faces (JSF)开发中,`rich:listShuttle`是RichFaces库中的一个非常实用的组件,主要用于实现列表项的双向选择和移动功能。例如,在用户界面中展示两个列表,并允许...
<rich:panelMenu style="width:200px" mode="ajax" iconExpandedGroup="disc" iconCollapsedGroup="disc" iconExpandedTopGroup="chevron"> <!-- 内容 --> </rich:panelMenu> </h:panelGrid> ``` #### 总结 ...
这是我用来测试的一个工程,都不能在rich:dataTable中使用action actionListener 博文链接:https://insomniask.iteye.com/blog/111030
<rich:panelMenu style="width:200px" mode="ajax" iconExpandedGroup="disc" iconCollapsedGroup="disc" iconExpandedTop="..."> ``` - **属性解释:** - `style`:设置菜单样式。 - `mode`:设置菜单的行为模式...
通过使用RichFaces的`rich:dataTable`和`rich:datascroller`组件,我们可以轻松地在Web应用中实现数据的展示和分页功能。同时,结合后端的`DataPage`和`PagedListDataModel`类,可以更高效地处理大量数据,提升应用...
而`rich:panelBar`则是一个可以折叠的面板组,它允许用户展开或折叠不同的面板来查看内容。每个`rich:panelBarItem`代表一个面板,有自己的标签和内容。这个组件特别适用于需要组织大量信息或选项的界面。 在`rich:...
1. **FileUpload组件**:RichFaces 提供了一个名为`<rich:fileUpload>`的组件,用于在Web页面上创建文件上传功能。这个组件允许用户选择本地文件并将其上传到服务器。`<rich:fileUpload>`提供了多种配置选项,如上传...
`<rich:scrollableDataTable>`是富表格组件,提供滚动条以便在大量数据中浏览,同时保持列宽和排序状态。这对于处理大量记录的应用非常有用。 8. **<rich:tabPanel>组件** `<rich:tabPanel>`用于创建带有多个标签...
在Rich组件部分,手册介绍了更复杂的UI组件,如<rich:ajaxValidator>用于表单验证,<rich:column>和<rich:columnGroup>用于数据展示,<rich:dataTable>、<rich:extendedDataTable>以及<rich:scrollableDataTable>...
Filthy Rich Clients: Developing Animated and Graphical Effects for Desktop Java Applications (Part 2)
Rich是一个Python库,用于在终端中提供富文本和精美的格式。 使您可以轻松地向终端输出添加颜色和样式。 Rich还可以直接提供漂亮的表格,进度条,降价,语法突出显示的源代码,回溯等等。 有关Rich的视频介绍,请...
<rich:datatable id="myTable" value="#{bean.dataList}" var="item"> <rich:column> <f:facet name="header"> <h:outputText value="日期" /> </f:facet> <h:outputText value="#{item.date}" /> </rich:...
3. **配置JSF页面**:在JSF页面中,使用`rich:datascroller`和`rich:extendedDataTable`组合实现分页。`rich:datascroller`将负责导航,而`rich:extendedDataTable`则展示数据。 ```xml <rich:extendedDataTable ...
在本文中,我们将深入探讨 RichFaces 标签的使用,特别是 `rich:componentControl` 和 `rich:modalPanel` 标签,以及 `inputNumberSlider` 和 `PanelBar` 组件。RichFaces 是一个功能丰富的 JavaServer Faces (JSF) ...