在提交表单时,分配值的顺序是什么?形式如下:
<h:form>
<h:inputText id="username" value="#{registrationBean.username}"
<h:inputText id="password" value="#{registrationBean.password}"
<h:commandLink id="register" action="#{registrationBean.doRegister}"
</h:form>
现在,我们有托管bean:
public class RegistrationBean{
private String username;
private String password;
//GET, SET
public void doRegister(){
//Some staff
}
}
我认为JSF总是根据我们将元素放入标记的顺序执行赋值。
因此,在我的情况下,username
字段将首先被初始化,而password
将被初始化为第二个。
我可以依赖那个订单吗?它是标准化还是实现定义的特征?
初始化是指调用相应的setter方法。
答案 0 :(得分:4)
您可能知道JSF请求处理生命周期适用于视图。视图由以javax.faces.component.UIViewRoot实例为根的数据结构表示,并由视图标识符标识,视图标识符通常是Web应用程序资源(您的.xhtml页面)的上下文相关路径。从xhtml页面构建UIViewRoot指向具有相同结构的树。
在更新模型值阶段执行应用程序模型数据更新。这是你的二传手被召唤的时候。此阶段的所有操作都在UIViewRoot上执行。来自JSF specification:
在Update Model Values阶段,JSF实现必须调用 树的UIViewRoot组件的processUpdates()方法。 这通常会导致树中每个组件的processUpdates()方法被递归调用,如UIComponent.processUpdates()方法的API参考中所述。
这意味着只要您的应用程序不直接与View的UIComponents交互,组件处理的顺序将由您的xhtml标记确定。
答案 1 :(得分:3)
JSF生命周期的每个阶段很可能按文档顺序处理组件(即与.xhtml文件中显示的标签的顺序相同)。
尽管如此,我建议不要依赖于此,因为对于代码的未来维护者而言,标签的顺序具有功能影响是出乎意料的。也就是说,如果某个未来的更改请求需要不同的标记顺序,维护者可能会更改标记顺序而不会导致此错误...