【问题标题】:How do I get a richfaces modal window to display without an onclick event?如何在没有 onclick 事件的情况下显示 Richfaces 模式窗口?
【发布时间】:2010-12-30 15:24:08
【问题描述】:

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

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

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

这个想法是,如果出现错误,支持 bean 会呈现它,它会呈现它,但只有在您单击提交并点击数据库并返回到表单以再次单击提交之后 .

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

【问题讨论】:

    标签: java jsf xhtml richfaces


    【解决方案1】:

    使用showWhenRendered 属性:

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

    【讨论】:

    • 原来你也可以将rendered属性设置为#{backingBean.isError},将showWhenRendered设置为true。我想在这种情况下就像 po-tay-to po-tah-to。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多