如何解决添加 pfExceptionHandler 条件后未调用 PrimeFaces CommandButton actionListener
点击按钮后 Ok
actionListener 方法应该被调用。
oncomplete
工作并关闭对话框。
浏览器控制台中没有显示错误,请求看起来不错。
index.xhtml
...
<p:importEnum type="pl.obfo.enums.MessageType"/>
<p:tab id="tab1" title="Nadgodziny">
...
<p:ajaxExceptionHandler type="pl.obfo.exceptions.OverhourException"
update="ovhrExceptionDialog"
onexception="PF('ovhrExceptionDialog').show();" />
<p:dialog id="ovhrExceptionDialog" header="#{pfExceptionHandler.exception.type.value}" widgetVar="ovhrExceptionDialog"
appendTo="@(body)" modal="true" width="400" closable="#{pfExceptionHandler.exception.type == MessageType.WARN}">
<c:set var="isWarn" value="#{pfExceptionHandler.type == MessageType.WARN}" />
#{pfExceptionHandler.message} <br/>
<div style="text-align: center; margin-top:10; margin-bottom:7;">
<p:commandButton value="OK" resetValues="true" rendered="#{isWarn}"
actionListener="#{overhourBean.saveOverhour()}"
oncomplete="handleSaveOverhourWarnDlg(xhr,status,args)"
update=":tabView:overhoursTableForm :tabView:summaryTableForm overhoursTableForm managedOverhourDialog :growl"
>
<f:actionListener binding="#{report.clearBalances()}"/>
<f:actionListener binding="#{summaryBean.clearSummary()}"/>
</p:commandButton>
<p:commandButton value="OK" resetValues="true" rendered="#{!isWarn}"
actionListener="#{overhourBean.save()}"
oncomplete="handleSaveOverhourWarnDlg(xhr,args)"
update=":tabView:overhoursTableForm :tabView:summaryTableForm overhoursTableForm managedOverhourDialog :growl"
>
<f:actionListener binding="#{report.clearBalances()}"/>
<f:actionListener binding="#{summaryBean.clearSummary()}"/>
</p:commandButton>
<p:commandButton rendered="#{isWarn}" value="Anuluj" onclick="PF('ovhrExceptionDialog').hide();" style="margin-left:5"/>
</div>
</p:dialog>
...
OverhourBean.java
...
public void saveOverhour() {
overhourValidator.checkInfos(managedOverhour);
save();
}
public void save() {
boolean savedOk = false;
try {
managedOverhour.setResourceId(userBean.getCurrentUser());
managedOverhour.setStatus(PENDING);
managedOverhour.setCreatedAt(LocalDate.now());
overhourDAO.add(managedOverhour);
savedOk = true;
lastProject = managedOverhour.getProject();
getCurrentInstance().addMessage(null,new FacesMessage(SEVERITY_INFO,"Nadgodziny zostały zapisane",null));
log.infof("Zapisano nadgodziny dla projektu: %s - %s. Użytkownik: %s,dnia: %s,liczba godzin: %.2f",managedOverhour.getProject().getProjectId(),managedOverhour.getProject().getName(),userBean.getCurrentUser(),managedOverhour.getStartAt(),managedOverhour.getHours());
syncReportWithGuiOnAdd();
} catch (Exception e) {
String msg = "Nie udało się utworzyć nowej nadgodziny: " + e.getMessage();
throw new SystemException(msg);
}
// parametr przekazywany do kontekstu JavaScript
PrimeFaces.Ajax ajax = PrimeFaces.current().ajax();
ajax.addCallbackParam("savedOk",savedOk);
}
...
MessageType.java
public enum MessageType {
WARN("Ostrzeżenie"),INFO("Informacja");
String value;
MessageType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
OverhourException.java
...
@ApplicationException
public class OverhourException extends RuntimeException {
private MessageType type;
public OverhourException(String question) {
this(question,MessageType.WARN);
}
public OverhourException(String question,MessageType type) {
super(question);
this.type = type;
}
public MessageType getType() {
return type;
}
public void setType(MessageType type) {
this.type = type;
}
}
即使我替换为
pfExceptionHandler.type == 'pl.obfo.exceptions.OverhourException'
还是不行。
如果我用 isWarn
删除或替换 1 == 1
变量的条件,它工作得很好。
如果我用 commadButton value="OK"
替换 value="#{pfExceptionHandler.type == MessageType.WARN}
,则值返回 true
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。