Как получить модальное окно richfaces для отображения без события onclick? - PullRequest
3 голосов
/ 30 декабря 2010

Я пытаюсь реализовать модальное окно , подобное этому , чтобы отобразить сообщение об ошибке для пользователя.У меня есть страница с формой для ввода пользователями своих данных, затем нажмите «Отправить», чтобы добавить их в базу данных.Если база данных возвращает ошибку, я хочу, чтобы модальное окно всплыло с сообщением об ошибке.

Единственная проблема в том, что я не могу получить модальное окно, если нет какого-либо события onclick.Я попытался использовать следующий код:

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

Идея состоит в том, что компонент поддержки будет обрабатывать его, если есть ошибка, и это происходит, но только через после после нажатия кнопки Отправить и нажатиябазы данных и получить обратно в форму, чтобы нажать кнопку Отправить снова.

В идеале, я хочу, чтобы модальное окно всплыло, когда страница загружается, если backingBean.isError возвращает true, но я чувствуюМне чего-то не хватает, чтобы это произошло.Есть идеи?

Ответы [ 2 ]

3 голосов
/ 03 января 2011

Другой способ сделать это без использования 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) - ошибка и сообщение под заголовком.

3 голосов
/ 30 декабря 2010

Используйте атрибут showWhenRendered:

<rich:modalPanel left="auto" top="250" id="waitpanel"  
    showWhenRendered="#{backingBean.isError}" minWidth="733" autosized="true">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...