На мой взгляд, у меня отключен p:inputText
, показывая некоторую информацию о адресе. Значение p:inputText
устанавливается слушателем dialogReturn
onAdresseDialogReturn()
. Помимо этого inputText у меня есть несколько других полей ввода (p:selectOneMenu
, p:inputText
).detectUnsavedChanges on dialogReturn event
Всякий раз, когда я изменяю некоторые значения других компонентов ввода и пытаюсь покинуть страницу, я получаю диалоговое окно с предупреждением от JavaScript detectUnsavedChanges
.
Моя проблема теперь в том, что я хочу это предупреждение также, когда слушатель dialogReturn
меняет значение поля inputText - но этого не происходит!
Так что мой вопрос: как я могу это достичь?
Здесь p:inputText
с p:commandButton
помощью диалогового primefaces рамки:
<ui:composition>
<ui:define name="head">
<h:outputScript name="js/detectUnsavedChanges.js"/>
</ui:define>
<ui:define name="content">
<h:form id="form">
<p:panelGrid>
<p:row>
<p:column>
<p:commandButton id="save" value="Save" ajax="false" action="#{bean.save}"/>
</p:columns>
</p:row>
</p:panelGrid>
<p:panelGrid>
<p:row>
<p:column>
<p:inputText id="adresse" disabled="true" size="50"
value="#{bean.adresse}"/>
<p:commandButton id="adresseAuswahl"
title="Adresse bearbeiten"
process="@this"
actionListener="#{bean.showAdresseDialog}">
<p:ajax event="dialogReturn" update="adresse"
listener="#{bean.onAdresseDialogReturn}"/>
</p:commandButton>
</p:columns>
</p:row>
</p:panelGrid>
</h:form>
</ui:define>
</ui:composition>
Здесь dialogReturn
слушателя в моем бобе:
public void onAdresseDialogReturn(SelectEvent e) {
final Adresse adresse = (Adresse) e.getObject();
boolean changedAdresse = Optional.ofNullable(adresse).isPresent()
&& !getAdresse().equals(adresse);
if (changedBauvorhabenAdresse) {
// Adresse has been changed
setAdresse(adresse);
}
}
Вот код JavaScript, как упомянуто BalusC из How to detect unsaved data in form when user leaves the page?:
$(function() {
// Set the unload message whenever any input element get changed.
$(':input').on('change', function() {
setConfirmUnload(true);
});
// Turn off the unload message whenever a form get submitted properly.
$('form').on('submit', function() {
setConfirmUnload(false);
});
});
function setConfirmUnload(on) {
var message = "You have unsaved data. Are you sure to leave the page?";
window.onbeforeunload = (on) ? function() { return message; } : null;
}
My Environment: Primefaces 6.0 on Wildfly.10.0.Final
Любые подсказки приветствуются - Спасибо!
Параметр 'р: commandButton' уже ajaxified по умолчанию как упомянутых в витрине PrimeFaces и документации – Kukeltje
Я так и думал. Я бы использовал компонент 'p: ajax' внутри компонента' dialog', слушающего событие ** close **. Как это: ' <р: Ajax события = "закрыть" обновление = "Adresse" слушатель = "# {} bean.onAdresseDialogReturn" OnComplete = "setConfirmUnload (истина)"/> ' –
Благодаря @EniSinanaj - отлично работает! – raho