如何在没有onclick事件的情况下显示richfaces模式窗口?

时间:2010-12-30 15:24:09

标签: java jsf xhtml richfaces

我正在尝试实现模式窗口like this以向用户显示错误消息。我有一个页面,其中包含供用户输入信息的表单,然后单击“提交”将其添加到数据库中。如果数据库返回错误,我希望弹出模态窗口并显示错误消息。

唯一的问题是我无法弹出模态窗口,除非有某种onclick事件。我尝试使用以下代码:

<rich:componentControl for="popup" attachTo="submitButton"
                       rendered="#{backingBean.isError}" operation="show"
                       event="onclick"/>

我们的想法是,如果出现错误,支持bean将呈现它,并且确实如此,但只有之后单击“提交”并点击数据库并返回到表单再次单击“提交”

理想情况下,如果backingBean.isError返回true,我希望在页面加载时弹出模态窗口,但我觉得我错过了一些可以实现的事情。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

使用showWhenRendered属性:

<rich:modalPanel left="auto" top="250" id="waitpanel"  
    showWhenRendered="#{backingBean.isError}" minWidth="733" autosized="true">

答案 1 :(得分:3)

使用backbean和“错误标志”的另一种方法是使用FacesMessage

实施例

如果db返回错误,请添加新的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_INFOFacesMessage.SEVERITY_WARNFacesMessage.SEVERITY_ERRORFacesMessage.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) - 标题下方的错误和消息。