2016-05-30 15 views
2

Ich versuche, eine Forschung von Produkten zu implementieren.Artikel in Ansicht aktualisieren

Meine Ansicht ist so etwas wie dieses:

<h:form> 
    <p:layoutUnit position="center"> 
     <ui:include src="/Desktop/Users/Include/featureCheckbox.xhtml"/>  
    </p:layoutUnit> 
    <p:layoutUnit position="south" style="border: 0px"> 
     <p:commandButton value="Search" 
         actionListener="#{productsController.searchProdByFeatures()}" 
         oncomplete="listProd.show();"/> 
    </p:layoutUnit> 
</h:form> 
<p:panel widgetVar="listProd" > 
    <ui:include src="/Desktop/Users/Include/productsScroller.xhtml"/> 
</p:panel> 

dies productsScroller.xhtml

OT: Ich weiß nicht, warum ich verwenden, um mehr Daten zu sehen, einfach scrollen nicht funktioniert Arbeit ...

<h:form prependId="false"> 
    <p:dataScroller value="#{productsController.items}" var="item" chunkSize="10"> 
     <f:facet name="header"> 
      Scroll Down to Load More Wheelchair 
     </f:facet> 

     <h:panelGrid columns="1" style="width:100%" > 
      <p:outputPanel> 
       <h:outputText value="#{item.name}" style="font-weight: bold"/> 
      </p:outputPanel> 
     </h:panelGrid> 
     <f:facet name="loader"> 
      <p:commandButton type="button" value="View More" /> 
     </f:facet> 
    </p:dataScroller> 
</h:form> 

und das ist Products (@Named und @ViewScoped)

... 
private Collection<Product> items; 
private Collection<Product> selectedItems; 


public Collection<Product> getSelectedItems() { 
    return selectedItems; 
} 

public void setSelectedItems(Collection<Product> selectedItems) { 
    this.selectedItems = selectedItems; 
} 

public Collection<Product> getItems() { 
    if (items == null) { 
     items = this.ejbFacade.findAll(); 
    } 
    System.out.println(items.size()); 
    return items; 
} 

public void setItems(Collection<Product> items) { 
    this.items = items; 
} 

public void searchProdByFeatures(){ 
    List<Product> items= (List<Product>) getItems(); 
    List<Product> newItems; 
    Collection<Feature> featuresCollection = featureController.getSelectedItems(); 
    List<Feature> selectedFeatures = new ArrayList<>(featuresCollection); 
    System.out.println(selectedFeatures.size()); //just for debug 
    try { 
     for (Feature selectedFeature : selectedFeatures) { 
      String msg=(selectedFeature.getName()+"/"); 
      System.out.println(selectedFeature.getName()); 
     } 
     newItems=productFacade.findProdByFeatures(selectedFeatures, items); 
     System.out.println("Searched product are "+newItems.size()); //just for debug   
     setItems(newItems); 
     System.out.println("New items are "+getItems().size()); //just for debug  
    } catch (NotFoundException e) { 
     setItems(null); 
     JsfUtil.addErrorMessage(e.getMessage()); 
    } 
} 

die Methode searchProdByFeatures() funktioniert gut, aber das Problem ist, dass die dataScroller wird nicht aktualisiert ... ich weiß, es ist etwas falsch in der Ansicht ist ... aber was?

oder ist es besser, die Ansicht vom Controller zu aktualisieren? Wie?

+0

NICHT verwenden 'prependId = "false"'. Siehe http://StackOverflow.com/Questions/7415230/Uiform-with-prependid-False-Breaks-fajax-Render – Kukeltje

Antwort

2

bearbeiten Sie den Code der dataScroller upadate durch Hinzufügen update = "yourIddataScroller"

<p:commandButton value="Search" 
         actionListener="#{productsController.searchProdByFeatures()}" 
         oncomplete="listProd.show();" update="yourIddataScroller"/> 
+0

Sorry, ich vergesse Update-Tag in meiner Frage zu schreiben ... Ich war mit update = "IDContainerDataScroller" und es gab leeren Inhalt zurück ... mit IdDataScroller das Problem behoben ... danke! – Marco