2012-03-20 6 views
1

から変更しました。インプレースの値を変更した場合は保存します。変更した値をPrimeFaces inplace

保存ボタンをクリックすると、メソッドemployeeController.save()が呼び出されます。しかし、私は新しい価値と古い価値をどのように伝えることができますか?私はこれをしたいので、値をデータベースに尋ねずに変更したかどうかを知ることができます。

<h:panelGrid id="display" columns="2" cellpadding="4" 
          style="width:300px;" 
          styleClass="ui-widget-content" 
          columnClasses="label, value"> 

        <h:outputText value="ID:" /> 
        <h:outputText id="ID" value="#{emp.id}" /> 

        <h:outputText value="Voornaam:"/> 
        <p:inplace id="firstnam" editor="true"> 
         <p:ajax event="save" onsuccess="#{employeeController.saveName()}"> 
         </p:ajax> 
         <p:inputText id ="firstName" value="#{emp.firstName}" 
            required="true" label="text"/> 
        </p:inplace> 

答えて

6

ここではvalueChangeListenerが対象です。

など。

public void firstNameChanged(ValueChangeEvent event) { 
    Object oldValue = event.getOldValue(); 
    Object newValue = event.getNewValue(); 
    // ... 
} 

<p:inputText ... valueChangeListener="#{employeeController.firstNameChanged}" /> 

あなたはそこbooleanを設定したり、他のいくつかのプロパティに値を収集し、実際のコマンドのアクションメソッドで、さらにそれを扱うことができます。

このメソッドは、値が実際に変更されたときにのみ呼び出されます。たとえそれがちょうどnullから空の文字列になったとしても。古い値equals()が新しい値のときには呼び出されません。

1

はマイルの場合、私はイベントが=を "保存" を使用することはできませんので、私はP使用:イベントイベント= "とvalueChange"を。 managedBeanでは、私はそれが変更されるプロパティを持ち、オブジェクトの所有者はこのプロパティを持ちます。私は多くの人がイベント=私はを使用し、この理由のため、表示エラーをレンダリングスローが、私の場合には、このイベントを「救う」とvalueChange

コードビュー

<p:column> 
<p:inplace id="inplaceNombre" emptyLabel="#{registro.usuario.nombre}" editor="true"> 
    <p:inputText id="nombre" required="true" 
       requiredMessage="#{msg['editar.nombre.required']}" 
       alt="#{msg['editar.alt.nombre']}" title="#{msg['editar.title.nombre']}" 
       tabindex="1" value="#{registro.nombre}" 
       styleClass="#{component.valid ? '' : 'invalid'}" maxlength="30"> 

       <f:validateBean for="nombre" /> 
      <p:ajax event="valueChange" update="@this messageNombre" /> 
    </p:inputText>       
    </p:inplace>           
</p:column> 

      <p:row> 
    <p:column> 
    <p:commandButton value="#{msg['editar.value.enviar']}" 
        title="#{msg['editar.title.enviar']}" alt="#{msg['editar.alt.enviar']}" 
        actionListener="#{registro.actualizarUsuario}" tabindex="7" /> 
    </p:column> 
     </p:row> 

managedBeanコードを使用してご覧ください

  //property that can be modified in the User 
      @Size(min=5 ,max=30 ,message="Este campo no es correcto: tamaño máximo [30]") 
     @Pattern(regexp="^[a-zA-Z]+[a-zA-Z ]+",message="Este campo no es correcto") 
     private String nombre; 

      //User get by database with f:event type=preRenderView in xhtml view 
      private Usuario usuario; 

次に、変更を確認してユーザーを更新します。

親切にしてください。

+1

'イベント=「とvalueChange」など本当に必要であれば、チェック、お勧めし'ですすべての 'UIInput'コンポーネントのデフォルトイベントです。属性を完全に省略することができます。 – BalusC

+0

私はこの動作が不明です。なぜ私はevent = "save"を使用できないのですか?私はタグp:ajaxでこの動作のコードを見ましたが、私のケースでは、このイベントを認識しないので、ビューがレンダリングされません。 –

+0

私は分かりません。おそらく、OPはランダムなイベント名を試して、偶然に彼の質問に偽のものを残した。 – BalusC

3

一般的な解決策:元のデータオブジェクトを保存し、修正からコピーを提供してください。

から最後に保存されたフィールドはいつでも変更されました。です。値変更リスナーの場合は、最後にを送信してから値が変更された場合にのみ、が表示されます。必ずしも同じではありません。古い値を覚えて

はあなたが簡単にUIでユーザーが行った変更を元に戻すことができますので、データベースへの更新が

関連する問題