2009-12-17 69 views
0

我几乎可以确定我做错了什么,因此问题的标题有点不正确。如何强制jsf创建bean的新实例而不是抛出NullPointerException?

我有一个窗体,有几个字段用于创建一个新的用户对象(如登录,密码,生日等字段)。我有2个按钮 - 取消和创建。我没有完成创建:),但是当我按下取消时,我看到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试图保存来自用户对象输入的值,但用户对象为空。

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

回答

1

在您的取消按钮集immediate="true" 这将跳过所有“不需要”的阶段。

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

相关问题