开发者

How do I get a richfaces modal window to display without an onclick event?

开发者 https://www.devze.com 2023-02-02 07:22 出处:网络
I\'m trying to implement a mo开发者_如何学Cdal window like this to display an error message to the user. I have a page with a form for users to enter their information, then click Submit to add it to

I'm trying to implement a mo开发者_如何学Cdal window like this to display an error message to the user. I have a page with a form for users to enter their information, then click Submit to add it to a database. If the database returns an error, I want the modal window to pop up with the error message.

The only problem is I can't get the modal window to pop up unless there's some kind of onclick event. I tried using the following code:

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

The idea is that the backing bean would render it if there is an error, and it does, but only after you click submit and hit the database and get returned to the form to click Submit again.

Ideally, I want the modal window to pop up when the page loads if backingBean.isError returns true, but I feel like I'm missing something to make that happen. Any ideas?


Use the showWhenRendered attribute:

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


Another way to do this w/o using the backbean and a "error flag" is using FacesMessage

Example

If the db return a error, add a new 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);
}

And as org.life.java said, use showWhenRendered, but with facesContext.maximumSeveirity to display the error message

<rich:modalPanel id="messagePanel" showWhenRendered="#{facesContext.maximumSeverity != null}">
   <rich:messages .../> or <h:messages .../>
</rich:modalPanel>

Modal panel will show up only when theres at least one message to be displayed and it will be automatic you just have to add your FacesMessage

The message can be FacesMessage.SEVERITY_INFO, FacesMessage.SEVERITY_WARN, FacesMessage.SEVERITY_ERROR and FacesMessage.SEVERITY_FATAL

And u can change icons and markers according to the message type, example:

<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>

This code will show a modal with a "title" and icon, like (errorIcon) - Error and message below the title.

0

精彩评论

暂无评论...
验证码 换一张
取 消