Practical_RichFaces要点Chapter05

1.       a4j: 提供了页面级的 Ajax 支持,也就是框架级的基本控制; rich: 提供了控件级的 Ajax 支持、布局控件以及客户端控件。

 

 

2.       使用 <rich:inplaceInput>

1)      defaultLabel 属性,可以点击该属性以编辑控件的值;

2)      对于控件值的修改只是在 Browser 上的行为,不会向 Server 传递任何数据;

3)      showControls 属性用来控制是否显示 Save/Cancel 按钮;

4)      controlsHorizontalPosition 和 controlsVerticalPosition 用来控制 Save/Cancel 的位置;

5)      也可以使用自定义的控制器 Control ,只需要在体中加入一个 <f:facet> ,像这样:

<rich:inplaceInput id="inputEmail" value="#{inplaceInputBean.email}"

defaultLabel="Click to edit email" showControls="true"

controlsVerticalPosition="bottom"

controlsHorizontalPosition="left">

<f:facet name="controls">

<button onclick="#{rich:component('inputEmail')}.save();" type="button">

Save

</button>

<button onclick="#{rich:component('inputEmail')}.cancel();" type="button">

Cancel

</button>

</f:facet>

</rich:inplaceInput>

 

6)       一旦自定义 Control 被启用,那么 showControls 属性也就隐式地被启用了。

7)       控件也提供了一些特定事件给 <a4j:support> 的,当控件状态改变的时候,这些事件就会被调用来发送 Ajax Request 。

• oneditactivation :当激活 edit 状态的时候,会触发 Ajax Request ;

• oneditactivated :当控件变为 edit 状态后,会触发 Ajax Request ;

• onviewactivation :当激活 view 状态的时候,会触发 Ajax Request ;

• onviewactivated :当控件状态变为 view 状态后,会触发 Ajax Request (这个最常用)。

 

 

 

3.       使用 <rich:inplaceSelect>

1)       用法及属性与 <rich:inplaceInput> 非常相似,也包括 defaultLabel 、 showControls 、 controlsHorizontalPosition 等属性;

2)       与标准 JSF 的选择类控件相同,使用 <f:selectItem> 和 <f:selectItems> 传递选项;

3)       也可以像 <rich:inplaceInput> 用 <f:facet> 使用自定义 Control 。

 

 

4.       使用 <rich:suggestionbox>

1)       当在 Input Field 里输入值的时候,控件会向 Server 发送 Request , Server 上的特定 Listener 被调用。该 Listener 根据输入值,返回一个建议值的集合。

2)       suggestAction 指定用于返回建议值范围的 Listener ,该 Listener 的名字不限,但应该满足以下两点:

· 具有一个 Object 类型的参数,代表输入的内容,这个 Object 实际上应该是一个 String 对象;

· 返回一个集合对象,代表建议的值范围,集合的类型应该是 <h:dataTable> 能够接受的。

例如: public ArrayList <State> suggest (Object value)

 

3)       只要 Listener 满足以上格式要求即可运行,至于返回什么值作为建议范围,则应该由用户编程实现。注意返回的是实际对象的集合,而不是 SelectItem 的集合。

4)       <rich:suggestionbox> 并不提供输入框,因此需要使用 for 属性指定一个现有的输入框。

5)       像 <h:dataTable> 一样,拥有 var 属性作为元素引用的名字, String 类型;也通过 <h:column> 设置每列的显示信息。

6)       列顺序是可以灵活改变的。默认情况下,被选中的建议值的第一列会被取出来作为输入框的值。当然,也可以使用 fetchValue 属性来指定某一列作为输入框的值。

7)       fetchValue 属性可以接受各种插入值,比如 fetchValue="#{state.name} – #{state.capital}" 。

8)       minChars 属性用来设置可以产生 Ajax Request 的最小字符数。

9)       eventsQueue 和 requestDelay 属性与之前遇到的功能相同。

10)   nothingLabel 用来显示没有查找到建议范围的情况。

 

【疑问】

虽然也包含 bypassUpdates 属性,但测试了一下, true 和 false 的效果似乎一样。用 PhaseListener 检测了一下,虽然都会产生 Ajax Request ,并且经历完整 JSF 生命周期,但输入框所对应的 managed bean 的属性值似乎并未改变。网上有国外的新闻组说 3.3.1GA 版的 <rich:suggestionbox> 的 bypassUpdates 属性存在 bug ,等待后续修正。

 

 

5.       使用 <rich:comboBox>

1)       这个控件是一个客户端 的建议控件,它会预先 render 整个值列表。

2)       <rich:comboBox> 的建议值列表不是从 Server 的 suggestAction 的得来,而是从 <f:selectItem> 和 <f:selectItems> 指定的完整值列表里得来。

3)       另一个指定建议值来源的方法是使用 suggestValues 属性,该属性接受 managed bean 的实际对象的集合,注意这里不是 SelectItem 的集合。

4)       也同样拥有 defaultLabel 等属性。

5)       directInputSuggestions 属性设为 true 时,建议值将直接出现在输入框里。

 

 

6.       使用 <rich:inputNumberSlider> 和 <rich:inputNumberSpinner>

1)       maxValue 和 minValue 设置取值范围;

2)       step 设置步进单位;

3)       enableManualInput 设置是否启用手动输入,默认为 true ;

4)       showInput 设置是否显示输入值;

【疑问】

在 <rich:inputNumberSpinner> 框里,按回车键会引发页面提交,很奇怪。
 

7.       使用 <rich:calendar>

1)       dataPattern 设置时间日期格式,比如: yyyy-MM-dd hh:mm a

2)       值类型应为 java.util.Date 。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gengv/archive/2009/06/08/4250351.aspx

你可能感兴趣的:(编程,Ajax,bean,Richfaces,JSF)