目前我正在学习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?
提前致谢!
答案 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的更多信息: