我几乎可以肯定我做错了,因此问题的标题有点不正确。
我有一个包含多个字段的表单,用于创建新的用户对象(登录,密码,生日等字段)。我有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。
这样做的正确方法是什么?
答案 0 :(得分:1)
immediate="true"
上的这将跳过所有“不需要的”阶段。
但是,“创建”按钮会出现同样的问题,您不应该在那里使用immediate
。
最好初始化user
属性 - 在构造函数中,或在方法上使用@PostConstruct
注释,该方法执行初始化操作。