Можно ли отменить Ajax-Запросы с помощью специального диалога с Primefaces 3.3?

66
5

Мы хотим отобразить диалоговое окно подтверждения, если пользователь меняет значения в selectOneMenu. Это хорошо работает с родным методом браузеров confirm(), поскольку он блокируется до тех пор, пока пользователь не решит. Есть ли элегантное (предпочтительное клиентское) решение, чтобы сделать это с помощью диалогов primefaces, чтобы внешний вид был совместим с различными браузерами?


Текущее решение:


<p:selectOneMenu id="som" value="#{foo.item}">
<f:selectItems value="#{foo.items}" var="i" itemLabel="#{i.name}" itemValue="#{i.value}" />
<p:ajax event="change" onstart="return confirmChange()" />
</p:selectOneMenu>

<script type="text/javascript">
function confirmChange() {
return confirm("O'RLY?");
}
</script>

спросил(а) 2012-08-21T17:30:00+04:00 7 лет, 10 месяцев назад
1
Решение
78

Вы можете использовать PrimeFaces <p:confirmDialog> или даже просто <p:dialog>.


<p:selectOneMenu id="som" value="#{foo.item}" onchange="confirm.show()">
<f:selectItems value="#{foo.items}" var="i" itemLabel="#{i.name}" itemValue="#{i.value}" />
</p:selectOneMenu>
<p:confirmDialog widgetVar="confirm" message="ORLY?" header="Confirm" severity="alert">
<p:commandButton value="Yes" action="#{bean.submit}" process="som" oncomplete="confirm.hide()" />
<p:commandButton value="No" type="button" onclick="confirm.hide()" />
</p:confirmDialog>

Выполните задание подтверждения в #{bean.submit}. Вы могли бы при необходимости отвлечь все это с помощью файла тега или составного компонента, чтобы он был более удобным для использования.

<p:selectOneMenu id="som" value="#{foo.item}" onchange="confirm.show()">
<f:selectItems value="#{foo.items}" var="i" itemLabel="#{i.name}" itemValue="#{i.value}" />
</p:selectOneMenu>
<my:confirmDialog id="confirm" message="ORLY?" action="#{bean.submit}" process="som" />

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

ответил(а) 2012-08-21T17:38:00+04:00 7 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема