0

データベースに保存されたデータを表示する 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 になります

4

2 に答える 2

2

commandButton から immediate="true" 属性を削除します。

Bean で定義されたプロパティでセッターを呼び出す責任がある jsf アプリケーション ライフサイクルの updateModel フェーズをスキップし、Bean 値を更新しません。

即時属性が JSF ライフサイクルに与える影響について詳しくは、こちらを参照してください。- 2006 年 9 月 27 日に @BalusC によって書かれた

于 2012-04-13T08:05:48.567 に答える
0

immediate = true を使用すると、検証せずにフォームを送信できます。あなたの問題を解決するために、あなたはこのようにします。

コマンド ボタンの saveEditProfileAction で、編集されたオブジェクトを意味する現在のユーザー オブジェクトを取得し、save メソッドを呼び出します。フレームワークは、サービス クラスの更新または挿入メソッドを自動的に呼び出します。そのため、サービス クラスには、inser、update、delete メソッドが含まれている必要があります。 .

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

そのため、save メソッドを呼び出している間、フォームのステータスに基づいて、コントロールはサービス クラスの挿入メソッドまたは更新メソッドに移動します。

于 2014-01-21T12:51:57.003 に答える