另一种不使用 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) - 标题下方的错误和消息。