Сохранение измененных значений из PrimeFaces на месте - PullRequest
1 голос
/ 20 марта 2012

Хочу сохранить стоимость места, если оно было изменено.

Метод 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>

Ответы [ 3 ]

6 голосов
/ 20 марта 2012

Там valueChangeListener для.

Например,

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

с

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

Вы можете установить boolean или собрать значения вкакое-то другое свойство и обработайте его в реальном методе действия команды.

Метод будет вызываться только тогда, когда значение действительно изменено.Даже если это просто от null до пустой строки.Он не будет вызываться, когда старое значение equals() новое значение.

3 голосов
/ 11 января 2013

Общее решение: сохранить исходный объект данных , предоставить копию с изменениями.

Вы всегда сможете сказать, какие поля изменились с момента последнего сохранения . В случае слушателей изменения значения вы узнаете только, изменилось ли значение с момента последней отправки , что не всегда одинаково.

Запоминание старых значений является хорошей практикой, поскольку вы можете легко отменить изменения, сделанные пользователем в пользовательском интерфейсе, проверить, действительно ли необходимо обновление базы данных и т. Д.

1 голос
/ 28 мая 2012

В моем случае я не могу использовать event = "save" , поэтому я использую p: event event = "valueChange" .В managedBean у меня есть свойства, что он будет изменен, и владелец объекта это свойства.Я вижу, что многие люди используют event = "save" , но в моем случае это событие выдает ошибку при просмотре рендера, поэтому я использую 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>

код управляемогоBean

            //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;

Затем я проверяю изменения и обновляю пользователя.

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...