2016-07-15 19 views
0

Ich habe ein seltsames Problem, ich bin sicher, dass es mit h verwandt ist: Form Placement-Tags. Ich habe eine Tabelle, über der Tabelle habe ich ein Suchformular, wo ich einige Tags setzen kann, zum Beispiel Name oder Nachname und danach wird die Tabelle aktualisiert. Und es hat funktioniert! Aber aus irgendwelchen Gründen hört es einfach auf zu arbeiten und ich habe keine Ahnung warum. Um jetzt die Ergebnisse der Suche zu überprüfen, muss ich die Seite aktualisieren oder die Seitennummerierung in der Tabelle von 10 auf 15 ändern, danach werden die Ergebnisse erscheinen. Hier ist ein Code:Tabelle will nicht nach Eingabe Such-Tags aktualisieren

xhtml:

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

wichtigen Code von ClientBean:

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

Antwort

0

allererst Sie eine Verletzung von W3C XHTML-Spezifikation begehen, Sie sind Verschachtelung Formen, Das kannst du nicht tun.

Und was Sie zu erreichen versuchen, ist ziemlich einfach.

Hier ist, wie Sie es tun:

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 Code-Schnipsel:

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

}