请帮我理解,
<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中得到了补偿?
谢谢
命令按钮不会这样做.命令按钮仅确定是否必须调用操作,如果需要,则调用它是哪种方法.每个输入组件都设置自己的值.实际作业是在与组件关联的decode()方法中完成Renderer的.在应用请求值阶段,JSF遍历所有UIForm,UIInput和UICommand组件.每个客户端首先通过自己的客户端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规范中有详细描述.
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |