`
stenlylee
  • 浏览: 261597 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

保持rich:panelMenu的展开状态

阅读更多

本文所写的例子是针对这篇帖子的。

 

我们需要两个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>

 

分享到:
评论
1 楼 ltj_007 2009-03-04  
谢谢了,正在找这方面的资料,想不到给找到了

相关推荐

    用richFaces的<rich:treeNode>标签开发tree

    `&lt;rich:tree&gt;`是富客户端界面中的一个交互式组件,可以展示具有层级关系的数据,用户可以通过展开、折叠节点来探索数据结构。 在`&lt;rich:treeNode&gt;`的使用中,我们需要指定几个关键属性来定义节点的行为和外观。这些...

    关于rich:fileUpload和a4j:mediaOutput的使用

    在本文中,我们将深入探讨`rich:fileUpload`和`a4j:mediaOutput`这两个组件在实际开发中的使用,特别是在处理文件上传和媒体输出时的关键知识点。它们都是RichFaces库的一部分,这是一个强大的JavaServer Faces (JSF...

    rich:message使用方法

    `&lt;a4j:support&gt;`监听`onkeyup`事件,当用户在`h:inputText`中输入时,会触发`reRender="order"`,使`&lt;rich:message&gt;`组件和`&lt;h:outputText&gt;`组件更新,显示当前输入的验证状态。 6. **处理用户输入** `&lt;a4j:...

    标签使用

    ### &lt;rich:listShuttle&gt;标签使用 在JavaServer Faces (JSF)开发中,`rich:listShuttle`是RichFaces库中的一个非常实用的组件,主要用于实现列表项的双向选择和移动功能。例如,在用户界面中展示两个列表,并允许...

    richface标签.doc

    &lt;rich:panelMenu style="width:200px" mode="ajax" iconExpandedGroup="disc" iconCollapsedGroup="disc" iconExpandedTopGroup="chevron"&gt; &lt;!-- 内容 --&gt; &lt;/rich:panelMenu&gt; &lt;/h:panelGrid&gt; ``` #### 总结 ...

    RichFaces的rich:dataTable组件内action actionListener不能使用

    这是我用来测试的一个工程,都不能在rich:dataTable中使用action actionListener 博文链接:https://insomniask.iteye.com/blog/111030

    Richfaces标签

    &lt;rich:panelMenu style="width:200px" mode="ajax" iconExpandedGroup="disc" iconCollapsedGroup="disc" iconExpandedTop="..."&gt; ``` - **属性解释:** - `style`:设置菜单样式。 - `mode`:设置菜单的行为模式...

    richfaces中的datagrid显示数据

    通过使用RichFaces的`rich:dataTable`和`rich:datascroller`组件,我们可以轻松地在Web应用中实现数据的展示和分页功能。同时,结合后端的`DataPage`和`PagedListDataModel`类,可以更高效地处理大量数据,提升应用...

    richfaces标签学习笔记.doc

    而`rich:panelBar`则是一个可以折叠的面板组,它允许用户展开或折叠不同的面板来查看内容。每个`rich:panelBarItem`代表一个面板,有自己的标签和内容。这个组件特别适用于需要组织大量信息或选项的界面。 在`rich:...

    JSF+rich 实现 fileUpload

    1. **FileUpload组件**:RichFaces 提供了一个名为`&lt;rich:fileUpload&gt;`的组件,用于在Web页面上创建文件上传功能。这个组件允许用户选择本地文件并将其上传到服务器。`&lt;rich:fileUpload&gt;`提供了多种配置选项,如上传...

    Usage of A4J.Usage of A4J.Usage of A4J.

    `&lt;rich:scrollableDataTable&gt;`是富表格组件,提供滚动条以便在大量数据中浏览,同时保持列宽和排序状态。这对于处理大量记录的应用非常有用。 8. **&lt;rich:tabPanel&gt;组件** `&lt;rich:tabPanel&gt;`用于创建带有多个标签...

    Richfaces 常用组件使用手册中文版

    在Rich组件部分,手册介绍了更复杂的UI组件,如&lt;rich:ajaxValidator&gt;用于表单验证,&lt;rich:column&gt;和&lt;rich:columnGroup&gt;用于数据展示,&lt;rich:dataTable&gt;、&lt;rich:extendedDataTable&gt;以及&lt;rich:scrollableDataTable&gt;...

    Filthy Rich Clients: Developing Animated and Graphical Effects for Desktop Java Applications (Part 2)

    Filthy Rich Clients: Developing Animated and Graphical Effects for Desktop Java Applications (Part 2)

    rich:Rich是一个Python库,用于在终端中显示富文本和精美格式

    Rich是一个Python库,用于在终端中提供富文本和精美的格式。 使您可以轻松地向终端输出添加颜色和样式。 Rich还可以直接提供漂亮的表格,进度条,降价,语法突出显示的源代码,回溯等等。 有关Rich的视频介绍,请...

    Richfaces的DateTable

    &lt;rich:datatable id="myTable" value="#{bean.dataList}" var="item"&gt; &lt;rich:column&gt; &lt;f:facet name="header"&gt; &lt;h:outputText value="日期" /&gt; &lt;/f:facet&gt; &lt;h:outputText value="#{item.date}" /&gt; &lt;/rich:...

    Richface实现服务器端分页Demo

    3. **配置JSF页面**:在JSF页面中,使用`rich:datascroller`和`rich:extendedDataTable`组合实现分页。`rich:datascroller`将负责导航,而`rich:extendedDataTable`则展示数据。 ```xml &lt;rich:extendedDataTable ...

    richfaces标签学习笔记

    在本文中,我们将深入探讨 RichFaces 标签的使用,特别是 `rich:componentControl` 和 `rich:modalPanel` 标签,以及 `inputNumberSlider` 和 `PanelBar` 组件。RichFaces 是一个功能丰富的 JavaServer Faces (JSF) ...

Global site tag (gtag.js) - Google Analytics