用户输入的数据未在托管bean中更新

时间:2012-04-13 06:15:11

标签: java jsf java-ee jsf-2

我有一个html页面(editprofile.xhtml),它显示了保存在数据库中的数据。我面临的问题是当我在屏幕上编辑一些数据并点击更新按钮时,编辑的数据不会进入bean,它会为null,从而导致错误。

<h:form id="editProfileForm">
 <f:facet name="label">
  <h:outputText value="Edit User Profile" />
 </f:facet>             
 <rich:panel header="Edit User Profile" style="font-size:10pt" >        
  <rich:simpleTogglePanel switchType="client" opened="true">
<f:facet name="header">Registration Details</f:facet>
<table>
    <tbody>
        <tr>
            <td>Login Name</td>
            <td>
            <h:inputText size="15" id="loginName" required="true"
                value="#{EditUserProfileBean.loginName}">
             <rich:ajaxValidator event="onblur" />
            </h:inputText>
            </td>
            <td></td>
            <td>Password</td>
            <td><h:inputSecret size="12" id="password" required="true"
                value="#{EditUserProfileBean.password}" >
            <rich:ajaxValidator event="onblur" />
            </h:inputSecret>
            </td>
            <td>Confirm Password</td>
            <td><h:inputSecret size="12" id="confirmpassword" required="true"
                value="#{EditUserProfileBean.confirmpassword}" >
            <rich:ajaxValidator event="onblur" />
            </h:inputSecret>
            </td>
        </tr>
</rich:simpleTogglePanel>  
<h:commandButton id="editProfile" action="#{EditUserProfileBean.saveEditProfileAction}" immediate="true" value="Update Profile" />
  </rich:panel>
 </h:form>

上面的页面填充了加载时的现有数据,但如果我编辑并说更新值为null

2 个答案:

答案 0 :(得分:1)

从commandButton中删除immediate =“true”属性。

它跳过了jsf应用程序生命周期的updateModel阶段,它负责调用bean中定义的属性的setter,因此不会更新bean值。

阅读how immediate attributes affects JSF lifecycle的更多信息。 - 由@BalusC于2006年9月27日撰写

答案 1 :(得分:0)

immediate = true允许您提交表单而不进行验证。并且为了解决你的问题你喜欢这样。

在你的saveEditProfileAction命令按钮中获取当前用户对象,这意味着编辑对象并调用save方法..框架将自动调用服务类的更新或插入方法。所以你的服务类必须包含inser,更新,删除方法。

saveEditProfileAction{
super.save(getUserObject());
}

因此,在调用save方法时,控件将根据表单状态转到服务类的inser或update方法。