分配托管bean的属性的顺序是什么?

时间:2015-04-19 16:40:03

标签: jsf jsf-2

在提交表单时,分配值的顺序是什么?形式如下:

<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方法。

2 个答案:

答案 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文件中显示的标签的顺序相同)。

尽管如此,我建议不要依赖于此,因为对于代码的未来维护者而言,标签的顺序具有功能影响是出乎意料的。也就是说,如果某个未来的更改请求需要不同的标记顺序,维护者可能会更改标记顺序而不会导致此错误...