a4j:commandbutton如何确定bean

mun*_*bir 0 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>
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Bal*_*usC 8

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

String value = request.getParameter(input.getClientId(context));
Run Code Online (Sandbox Code Playgroud)

(request就在这里HttpServletRequest,input就在这里UIInput)

然后,在必要时进行转换和验证之后,最终将其设置为由其自己的value属性引用的bean 属性.

input.getValueExpression("value").setValue(context.getElContext(), value);
Run Code Online (Sandbox Code Playgroud)

ValueExpression#setValue()将评估#{userBean.age},自动创建,如果它不在范围内还存在,然后调用这个bean setAge()与传入的值的方法就可以了.

这在JSF规范中有详细描述.