a4j:outputpanel和a4j:region之间有什么区别?

时间:2014-02-12 05:29:53

标签: ajax jsf richfaces

问题是所有重要的事情。当需要使用a4J:outputpanel和a4j:region?

1 个答案:

答案 0 :(得分:4)

文档说明了一切:

  

<a4j:region>组件指定要在服务器上处理的JSF组件树的一部分。该区域导致所有a4j和富Ajax控件执行:解码,验证和更新模型。即使未明确声明,该区域也会导致这些组件执行。因此,可以使用声明性方法更轻松地标记处理区域。

这就像将execute属性中的所有组件明确命名为操作一样。举个例子:

<h:inputText id="outerStuff" value="#{bean.blubb}" />
<a4j:region id="innerRegion">
  <h:inputText id="stuff1" value="#{bean.bla}" />
  <h:inputText id="stuff2" value="#{bean.bla2}" />
  <a4j:commandButton action="#{bean.process}" value="click me" />
</a4j:region>

以下三个commandButton定义都是等效的:

  <a4j:commandButton action="#{bean.process}" value="click me" 
      execute="stuff1,stuff2,@this" />
  <a4j:commandButton action="#{bean.process}" value="click me" 
      execute="@region" />
  <a4j:commandButton action="#{bean.process}" value="click me" />

第三个有效,因为showcase documentation说:

  

但是,如果控件包含a4j:region标记并且没有执行定义,则使用execute =“@ region”代替。

与此相反,<a4j:outputPanel>是在<h:panelGroup>之后使用ajaxRendered属性的附加功能建模的。如果您将其关闭,则其行为类似于panelGroup(呈现spandiv元素。如果你启用它,它会导致每个AJAX请求呈现它的内容(除非导致请求的组件被注释limitRender)。

总结一下:<a4j:region>会影响Richfaces执行视图/更新模型的方式,<a4j:outputPanel>会更改视图的呈现方式。