Другой способ сделать это без использования backbean и «флага ошибки» - использовать FacesMessage
Пример
Если база данных возвращает ошибку, добавьте новое FacesMessage
try {
(...)
}
catch (Exception e) {
//If theres a error (db error, java error..) or a "throw new Exception()" (if your db error doesn't make a exception) add the message...
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, null, "Error message.");
FacesContext.getCurrentInstance().addMessage(null, facesMsg);
}
И, как сказал org.life.java, используйте showWhenRendered
, но с facesContext.maximumSeveirity
для отображения сообщения об ошибке
<rich:modalPanel id="messagePanel" showWhenRendered="#{facesContext.maximumSeverity != null}">
<rich:messages .../> or <h:messages .../>
</rich:modalPanel>
Модальная панель будет отображаться только тогда, когда есть хотя бы одинсообщение будет отображаться, и оно будет автоматическим, вам просто нужно добавить ваше FacesMessage
Сообщение может быть FacesMessage.SEVERITY_INFO
, FacesMessage.SEVERITY_WARN
, FacesMessage.SEVERITY_ERROR
и FacesMessage.SEVERITY_FATAL
И вы можетеизменить значки и маркеры в соответствии с типом сообщения, например:
<rich:modalPanel id="messagePanel" showWhenRendered="#{facesContext.maximumSeverity != null}">
<!-- every severity has a ordinal number, im not sure but 0 = info, 1 = warn, 2 = error and 3 = fatal, i guess -->
<h:panelGrid columns="2" rendered="#{facesContext.maximumSeverity.ordinal == 0}">
<h:graphicImage value="/images/icons/mini_info.gif"/>
<h:outputText value="Information" style="color: blue; font-size: 16px;"/>
</h:panelGrid>
<h:panelGrid columns="2" rendered="#{facesContext.maximumSeverity.ordinal == 2}">
<h:graphicImage value="/images/icons/mini_error.gif"/>
<h:outputText value="Error" style="color: red; font-size: 16px;"/>
</h:panelGrid>
<!-- f:facet to change messsages markers -->
<rich:messages id="mpMessage1">
<f:facet id="mpErrorMarker" name="infoMarker">
<h:outputText value="- "/>
</f:facet>
<f:facet id="mpErrorMarker" name="errorMarker">
<h:outputText value="- "/>
</f:facet>
</rich:messages>
</rich:modalPanel>
В этом коде будет отображаться модальное окно с заголовком и значком, например (errorIcon) - ошибка и сообщение под заголовком.