nellybady 发表于 2013-1-29 11:40:48

RichFaces学习(八)----Menu Components

1.<rich:dropDownMenu>
1)<rich:dropDownMenu> 生成下拉菜单。

2)每一个 menu item 都可以设定 action 或 actionListener 以供 Ajax 调用。 reRender 属性定义需要被刷新的控件。

3)<rich:toolBar> 是装载下拉菜单的容器。

4)<rich:dropDownMenu> 不提供其自己的 form ,所以必须置于 form 里才能使用。

5)可以使用 <rich:dropDownMenu> 的 value 属性或者 <f:facet name=”label”> 来指定菜单的名称。

6)submitMode 属性控制提交模式,三种选择:

       Server (默认):使用常规的表单提交 Request ;

       Ajax :使用 Ajax 提交;

       None : action 和 actionListener 都被忽略掉, menu item 不触发任何提交,所有行为都取决于嵌于 item 内部的控件。
如果在 <rich:dropDownMenu> 设置该属性,则其内部的所有 menuItem 也将继承其属性值。

7) <rich:menuItem> 也提供了 onXXXX 属性,例如 onselect 、 onclick 、 oncomplete 等,用于调用自定义 JavaScript 代码(如显示 modalPanel 等)。

   2.<rich:contextMenu>
1)event 属性用于设定引起 contextMenu 弹出的事件,比如 oncontextmenu 、 onclick 等,主要还是要看 <rich:contextMenu> 所服务的控件支持哪些 onXXXX 事件。

2)submitMode 属性控制提交模式,三种选择:

       Server (默认):使用常规的表单提交 Request ;

       Ajax :使用 Ajax 提交;

      None : action 和 actionListener 都被忽略掉, menu item 不触发任何提交,所有行为都取决于嵌于 item 内部的控件。
如果在 <rich:contextMenu> 设置该属性,则其内部的所有 menuItem 也将继承其属性值。
3)attachTo 属性用于指定将 contextMenu 指定给哪个控件。

4)或是将 <rich:contextMenu> 直接置于某个控件体内,并将 attached 属性设为 true ,也可以实现以上效果。比如在表格中使用时,可以将 <rich:contextMenu> 直接放在 <rich:column> 中。

但应注意,根据用户指南提示, <rich:contextMenu> 应该放在 <h:outputText> 外面,或者为 <h:outputText> 设置 ID ,已实现正常使用。

5)disableDefaultMenu 属性可以彻底禁用页面的默认右键菜单。

6)可以在 menuItem 体内,使用 <f:setPropertyActionListener> 或 <a4j:actionparam> ,传递参数。

   3.<rich:contextMenu> 与 <rich:componentControl>
1)可以用 <rich:componentControl> 来调用显示 contextMenu ,并传递参数,例如:
<rich:componentControl event="onRowClick" for="menu" operation="show">
<f:param value="#{air.name}" name="airlineName" />
</rich:componentControl>

2)这时 <rich:contextMenu> 的 attached 属性应该设为 false 。

3)通过 <f:param> 传递的参数,可以在 contextMenu 中使用,比如:
<rich:menuItem value="Select {airlineName} " actionListener="#{airlinesBean.select}">
</rich:menuItem>

注意,这里用的是 {paramName} ,而 #{paramName} ,没有“ # ”。

    4.<rich:contextMenu> 与 <a4j:support>
1)当需要动态的向 <rich:contextMenu> 传递参数的时候,尤其是在 dataTable 中的时候,有两种方法:

   将 <rich:contextMenu> 放在 dataTable 体内,则 <rich:contextMenu> 可以直接使用 dataTable 的 var 属性;但局限性就是,必须置于 dataTable 体内;
另方法就是使用 <a4j:support> 。

2)具体方法就是通过设定 <a4j:support> 的 event 属性,指定父控件的什么样的事件会弹出 contextMenu 。例如:

<a4j:form>
<rich:dataTable id="dtTable" value="#{dataTableTestBean.xcvrList}" var="xcvr" rows="15">   
<rich:column>
      <f:facet name="header">
<h:outputText value="Item Code"></h:outputText>
       </f:facet>
<h:outputText value="#{xcvr.itemCode}"></h:outputText>
</rich:column>
<rich:column>
      <f:facet name="header">
<h:outputText value="Market Name"></h:outputText>
       </f:facet>
<h:outputText value="#{xcvr.marketName}"></h:outputText>
</rich:column>
   <a4j:support event="onRowContextMenu" reRender="ctxMenu" oncomplete=" #{rich:component('ctxMenu')}.doShow(event,{}) " >
<f:setPropertyActionListener value="#{xcvr}" target="#{dataTableTestBean.selectedXcvr}"/>
</a4j:support>
</rich:dataTable>
<rich:contextMenu id="ctxMenu" submitMode="ajax" attached="false" disableDefaultMenu="true">
<rich:menuItem value="View #{dataTableTestBean.selectedXcvr.itemCode}" reRender="detailPanel" ajaxSingle="true" actionListener="#{dataTableTestBean.menuClicked}" oncomplete="#{rich:component('detailPanel')}.show()">
</rich:menuItem>
</rich:contextMenu>
</a4j:form>
页: [1]
查看完整版本: RichFaces学习(八)----Menu Components