2016-07-15 4 views
0

私は奇妙な問題がありますが、h:form配置タグに関係していると確信しています。私はテーブルを持っています。テーブルの上には、名前や姓のようなタグを置くことができる検索フォームがあり、そのテーブルがリフレッシュされます。そしてそれは働いた!しかし、何らかの理由でそれが機能しなくなってしまったのですが、私は理由を知りません。今度は検索結果を確認するために、ページを更新するか、テーブルのページ番号を10から15に変更してから、その結果が表示されます。ここではいくつかのコードは次のとおりです。入力検索タグの後にテーブルを更新したくない

XHTML:ClientBeanから

<h:form> 
     <div class="row"> 
      <div class="panel-heading text-center"> 
       <div class="bootstrap-filestyle input-group inn"> 
        <div class="search-criteria" style="width: 500px"> 
         <h:inputText value="#{clientBean.tags}" styleClass="form-control" 
          type="text"> 
          <f:passThroughAttribute name="placeholder" 
           value="Imię, nazwisko, adres..." /> 
         </h:inputText> 
        </div> 
        <p:commandButton type="submit" style="float:left" 
         styleClass="btn btn-primary" value="Szukaj" 
         actionListener="#{clientBean.getAllClients()}"> 
         <i class="icon-search icon-white"></i> 
        </p:commandButton> 
       </div> 
      </div> 
      </div> 

     <h:form> 
     <p:dataTable id="clientsTable" style="white-space: nowrap" 
      var="client" value="#{clientBean.getAllClients()}" paginator="true" 
      rows="15" 
      paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
      rowsPerPageTemplate="10,15"> 

      <p:column headerText="Imię"> 
       <h:outputText value="#{client.name}" /> 
      </p:column> 
      <p:column headerText="Nazwisko"> 
       <h:outputText value="#{client.lastName}" /> 
      </p:column> 
      <p:column headerText="Numer telefonu"> 
       <h:outputText value="#{client.phoneNumber}" /> 
      </p:column> 
      <p:column headerText="Adres"> 
       <h:outputText value="#{client.address}" /> 
      </p:column> 
      <p:column> 
       <a href="klienci/#{client.ID}" 
        class="btn btn-success edit resized-font"><span 
        class="glyphicon glyphicon-pencil"></span> Edytuj</a> 

       <a href="klienci/#{client.ID}" 
        class="btn btn-danger delete resized-font"><span 
        class="glyphicon glyphicon-trash"></span> Usuń</a> 

       <a href="klienci/#{client.ID}" class="btn btn-primary resized-font"><span 
        class="glyphicon glyphicon-book"></span> Informacje</a> 
      </p:column> 
     </p:dataTable> 
     </h:form> 
    </h:form> 

重要コード:

private String tags; 

public Set<Client> getAllClients() { 

    if (tags == null) { 
     Set<Client> clients = new HashSet<Client>(clientDao.findAll()); 
     return clients; 
    } 

    return getClients(); 
} 

public Set<Client> getClients() { 

    Set<Client> mergedClientSet = new HashSet<>(); 
    String[] tags = getTags().split(" "); 

    for(int i=0; i<tags.length; i++){ 
     mergedClientSet.addAll(searchService.getClientWithParameters(tags[i])); 
    } 

    return mergedClientSet; 
} 

public String getTags() { 
    return tags; 
} 

public void setTags(String tags) { 
    this.tags = tags; 
} 

答えて

0

あなたはW3C XHTML仕様の違反を犯しているまず第一に、あなたは、営巣フォームですあなたはそれをすることはできません。

あなたが達成しようとしていることはかなり簡単です。

は、ここであなたがそれを行う方法は次のとおりです。

JSFにfacelet:

<h:form prependId="true" id="main-form"> 
    <div class="row"> 
     <div class="panel-heading text-center"> 
      <div class="bootstrap-filestyle input-group inn"> 
       <div class="search-criteria" 
        style="width: 500px"> 
        <h:inputText value="#{clientBean.tags}" 
           styleClass="form-control"> 
         <f:passThroughAttribute name="placeholder" 
               value="Imię, nazwisko, adres..." /> 
        </h:inputText> 
       </div> 
       <p:commandButton style="float:left" 
           styleClass="btn btn-primary" value="Szukaj" 
           actionListener="#{clientBean.doTagsSearch}" 
           update=":main-form:clients-table"> 
        <i class="icon-search icon-white"></i> 
       </p:commandButton> 
      </div> 
     </div> 
     </div> 

    <p:dataTable id="clients-table" 
       style="white-space: nowrap" 
       var="client" 
       value="#{clientBean.clients}" 
       paginator="true" 
       rows="15" 
       paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
       rowsPerPageTemplate="10,15"> 

     <p:column headerText="Imię"> 
      <h:outputText value="#{client.name}" /> 
     </p:column> 
     <p:column headerText="Nazwisko"> 
      <h:outputText value="#{client.lastName}" /> 
     </p:column> 
     <p:column headerText="Numer telefonu"> 
      <h:outputText value="#{client.phoneNumber}" /> 
     </p:column> 
     <p:column headerText="Adres"> 
      <h:outputText value="#{client.address}" /> 
     </p:column> 
     <p:column> 
      <a href="klienci/#{client.ID}" 
       class="btn btn-success edit resized-font"><span 
       class="glyphicon glyphicon-pencil"></span> Edytuj</a> 

      <a href="klienci/#{client.ID}" 
       class="btn btn-danger delete resized-font"><span 
       class="glyphicon glyphicon-trash"></span> Usuń</a> 

      <a href="klienci/#{client.ID}" class="btn btn-primary resized-font"><span 
       class="glyphicon glyphicon-book"></span> Informacje</a> 
     </p:column> 
    </p:dataTable> 
</h:form> 

ManagedBeanコードスニペット:

private String tags; 
private ArrayList<Client> clients; 

@PostConstruct 
public void init() { 
    clients = clientDao.findAll();//must return an ArrayList of Client 
} 

public void doTagsSearch() { 
    if (tags == null) { 
     clients = clientDao.findAll(); 
    } else { 
     clients = getClientsByTags(); 
    } 

} 

public ArrayList<Client> getClientsByTags() { 
    //use your tags logic. 
    //must return an ArrayList of Clients. 
    ... 
} 

public String getTags() { 
    return tags; 
} 

public void setTags(String tags) { 
    this.tags = tags; 
} 

public String getClients() { 
    return clients; 
} 

public void setClients(ArrayList<Client> clients) { 
    this.clients = clients; 
} 

}

関連する問題