a4j:commandbutton如何确定bean

时间:2012-05-29 05:49:49

标签: richfaces jsf-1.2

请帮助我理解,

<h:form>
  <h:panelGrid columns="3">
    <h:outputText value="Age:"/>
    <h:inputText value="#{userBean.age}" size="4"/>
    <a4j:commandButton value="Enter Age" reRender="age"/>
  </h:panelGrid>
  <h:panelGrid>
    <h:outputText id="age" value="Your age: #{userBean.age}"/>
  </h:panelGrid>
</h:form>

当单击commandButton时,它如何评估bean以调用setter。它是否从输入区域内使用的bean中得到了补偿?

感谢

1 个答案:

答案 0 :(得分:8)

命令按钮不会这样做。命令按钮仅确定是否必须调用操作,如果需要,则调用它是哪种方法。每个输入组件都设置自己的值。实际作业是在与组件关联的decode()的{​​{1}}方法中完成的。在应用请求值阶段,JSF会遍历所有RendererUIFormUIInput组件。它们中的每一个首先通过自己的客户端ID获取请求参数值作为请求参数名称:

UICommand

String value = request.getParameter(input.getClientId(context)); 在这里HttpServletRequestrequest在这里UIInput

然后,在必要的转换和验证过程之后,它最终被设置为由其自己的input属性引用的bean属性。

value

ValueExpression#setValue()将评估input.getValueExpression("value").setValue(context.getElContext(), value); ,如果bean尚不存在,则自动创建bean,然后使用传入的方法调用其上的#{userBean.age}方法值。

JSF specification

中详细介绍了这一点