Мне нужно показать in another tab
сгенерированный отчет методом бина (bean.generateReporte())
. И показать сообщение, когда отчет не может быть сгенерирован (данные не найдены в соответствии с критериями).
мой первый код в .xhtml был :
<p:commandButton id="printDeliveryList" label="Generate Delivery List" styleClass="btn-success"
style="float:left" icon="fa fa-print"
action="#{bean.generateReporte()}"
onclick="this.form.target = '_blank'"
ajax="false"
/>
Я читал этот вопрос Как предотвратить выполнение commandButton действия, когда метод onclick возвращает false и этот вопрос Как вызвать функцию JS по нажатию кнопки JSF и заблокировать перезагрузку страницы / навигацию? и этот пост https://www.adictosaltrabajo.com/2011/09/14/primefaces-client-side-ajax-events/ И эта документация https://www.primefaces.org/showcase/ui/misc/requestContext.xhtml
Я думал о onsuccess
событии.
Вот мой код позже ....
В сторону bean
у меня есть:
public void generateReporte() {
// blabla
if (success) {
addGeneratedToCallback(true);
} else {
addGeneratedToCallback(false);
}
}
private void addGeneratedToCallback(boolean value) {
PrimeFaces.current().ajax().addCallbackParam("generated", value);
}
На стороне .xhtml
<script type="text/javascript">
function handleComplete(xhr, status, args) {
if (args.validationFailed) {
PrimeFaces.debug("Validation Failed");
} else {
if (args.generated) {
// open a new tab in the browser
//window.open(this.form.target = '_blank');
form.target = '_blank';
} else {
// show message
}
}
}
</script>
<p:commandButton id="printListaEntrega" label="Generar Lista de Entrega" styleClass="btn-success"
style="float:left" icon="fa fa-print"
action="#{bean.generateReporte()}"
ajax="false"
oncomplete="handleComplete(xhr, status, args)"
/>
Результат моего кода
С ajax="false"
Я получил это, когдаГенерация отчета невозможна.
Когда я удаляю ajax="false"
из p:commandButton
и отчет генерируется, я получил. (Не открывать новыйвкладка в браузере и не могу загрузить отчет)
Можно ли установить условную ajax="bean.someMethodOrProperty"
?