如何强制jsf创建bean的新实例而不是抛出NullPointerException?

时间:2009-12-17 15:18:32

标签: data-binding jsf nullpointerexception

我几乎可以肯定我做错了,因此问题的标题有点不正确。

我有一个包含多个字段的表单,用于创建新的用户对象(登录,密码,生日等字段)。我有2个按钮 - 取消和创建。我还没完成Create :),但是当我按下Cancel时,我看到NullPointerException。这是简化的代码:

<f:view>
    <h:form>
        <h:panelGroup layout="block">       
            <h:inputText id="add_login" value="#{userSupport.user.login}"/>
            <h:inputSecret id="add_password" value="#{userSupport.user.password}"/>
            <h:inputText id="add_name" value="#{userSupport.user.name}"/>
            <h:inputText id="add_surname" value="#{userSupport.user.surname}"/>

            <h:commandButton value="Cancel" action="cancel"/>
        </h:panelGroup>
    </h:form>
</f:view>

UserSupport类包含带有getter和setter以及其他一些方法的字段user。它是一个具有Session范围的Spring bean。

当我按下取消时,我看到NPE,因为jsf尝试从用户对象的输入中保存值,但是user-object为null。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

取消按钮设置immediate="true"上的

这将跳过所有“不需要的”阶段。

但是,“创建”按钮会出现同样的问题,您不应该在那里使用immediate。 最好初始化user属性 - 在构造函数中,或在方法上使用@PostConstruct注释,该方法执行初始化操作。