2013-12-13 3 views
0

У меня есть страница для поиска authors. Он должен показывать информацию об найденном авторе или показывать сообщение, когда автор не найден.Советы по использованию <rich: notifyMessage>

Я пытаюсь использовать <rich:notifyMessage>, но проблема в том, что когда я его использую, результаты от найденных авторов не отображаются, а также появляется сообщение в правом углу страницы, d хотел бы, чтобы он появился ниже панели, где появятся результаты поиска.

Посмотрите, как я это делаю, есть ли лучший способ сделать это?

XHTML
<h:form> 
    <br /> 
    <br /> 
    Insert Author 
    <br /> 
    <br /> 
    <br /> 
    <rich:panel id="panel" style="width:310px"> 
     <f:facet name="header">Search for the author you want to insert</f:facet> 
     <h:panelGrid columns="3"> 
      Name: <h:inputText value="#{insertAuthorController.nameToSearch}" /> 

      <a4j:commandButton value="Search" action="#{insertAuthorController.searchAuthor()}"> 
      </a4j:commandButton> 
     </h:panelGrid> 
    </rich:panel> 
     <br />  
     <rich:notifyMessage/> 

     <rich:dataTable value="#{insertAuthorController.authorListOfMap}" var="result"> 
      <c:forEach items="#{insertAuthorController.variableNames}" var="vname"> 
       <rich:column> 
        <f:facet name="header">#{vname}</f:facet> 
         #{result[vname]} 
       </rich:column> 
      </c:forEach>  
     </rich:dataTable> 
     <br /> 
     <h:commandButton value="Go to insert page" action="#{insertAuthorController.searchAuthor()}" /> 
    </h:form> 

Bean

public void searchAuthor() { 
     this.variableNames.clear(); 
     List<String> uris = new ArrayList<String>(); 

     uris = this.authMapper.searchAuthorUriByName(this.nameToSearch); 

     if((uris != null) && (!uris.isEmpty())) { 

     for(String uri : uris) { 
      Map<String, String> map = new HashMap<String, String>(); 
      String name = this.authMapper.searchNameByAuthorUri(uri); 
      String email = this.authMapper.searchEmailByAuthorUri(uri); 

      map.put("URI", uri); 
      map.put("Nome", name); 
      map.put("Email", email); 
      authorListOfMap.add(map); 
     } 
      this.addVariableNames(); 
     } else { 
      FacesContext ctx = FacesContext.getCurrentInstance(); 
      FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Detail","Author not found!"); //FacesMessage has other info levels 
      ctx.addMessage(null,msg); 
     } 
    } 

Спасибо!

ответ

0

Предполагается, что notifyMessage ведет себя так (то есть всплывает в углу экрана), если вы хотите, чтобы просто текстовое сообщение использовало <rich:message>.

Или в этом простом случае вы можете проверить, если результат возвращается что-то:

<h:outputText value="No results" 
    rendered="#{fn:length(insertAuthorController.authorListOfMap) == 0}"> 

Ваш стол не появляется, потому что вам нужно засавить, если вы хотите, чтобы увидеть изменения:

<rich:dataTable id="authorsTable" …> 

<a4j:commandButton … render="authorsTable" /> 
+0

Thak вам за ответ! Посмотрите, какой компонент вы предлагаете мне для показа уведомления рядом с входным текстом, когда (например) оно обязательно = true, и пользователь не заполняет его? – Luciane

+0

Как я уже сказал, ''. – Makhiel

+0

Хорошо, спасибо !!!!! – Luciane

Смежные вопросы