当a4j:commandButton没有“action”属性时,如何提交a4j:表单

时间:2012-07-20 09:09:39

标签: jsf richfaces jsf-1.2

目前我正在学习RichFaces并在现场阅读一些演示,http://livedemo.exadel.com/richfaces-demo/richfaces/commandButton.jsf?c = commandButton& tab = usage

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:a4j="http://richfaces.org/a4j"
  xmlns:rich="http://richfaces.org/rich">

<style>
    .gridhello {
        border-collapse : collapse;
    }
    .gridhellocolumn {
        padding-left : 0;
    }
    .outhello {
        font-weight: bold;
    }
</style>

<a4j:form>
    <h:panelGrid columns="3" styleClass="gridhello" columnClasses="gridhellocolumn">
        <h:outputText value="Name:" />
        <h:inputText value="#{userBean.name}" />
        **<a4j:commandButton value="Say Hello" reRender="out" />**
    </h:panelGrid>
</a4j:form>
<rich:spacer height="7"/>
<br />
<h:panelGroup id="out">
    <h:outputText value="Hello " rendered="#{not empty userBean.name}" styleClass="outhello" />
    <h:outputText value="#{userBean.name}" styleClass="outhello" />
    <h:outputText value="!" rendered="#{not empty userBean.name}" styleClass="outhello" />
</h:panelGroup>

<br />

代码行没有“action”属性,我只是想知道它是如何工作的,在这种情况下调用back bean的默认方法是什么,以便更新userBean.name?

提前致谢!

1 个答案:

答案 0 :(得分:3)

执行提交时,表单数据将发送到托管bean的映射属性。这是UICommand的默认行为:<h:commandButton><h:commandLink><a4j:commandButton><a4j:commandLink>以及<a4j:jsFunction>等其他行为。即使您没有声明要执行的操作,表单数据也会通过POST请求提交给服务器,并且将触发JSF生命周期。作为生命周期的一部分,在更新模型阶段,JSF会将从组件绑定的数据设置为托管bean属性,然后调用应用程序阶段将执行任何操作(如果可用),最终将生成渲染响应阶段响应并更新View(JSP,Facelets)。在这种情况下,由于它是一个ajax调用,视图将被更新;更确切地说,ID为"out"的组件将会更新。请注意,此"out"内容位于<a4j:form>之外,此处的值不会发送到服务器,reRender仍将使用视图模型值更新其值。

更新:

<h:inputText value="#{userBean.name}"name托管bean的UserBean属性与<h:inputText>组件的值绑定。这是JSF的基本概念。请记住,RichFaces不是JSF实现,它扩展了框架并添加了对RIA的ajax支持等功能。

这一行

<h:outputText value="#{userBean.name}" styleClass="outhello" />

表示:将name托管bean的UserBean属性的值绑定到outputText组件。尽管如此,这还是在表单之外,因此该组件的实际价值不会在服务器上发送。

有些人了解有关JSF的更多信息: