2016-05-30 2 views
2

J'essaie de mettre en œuvre une recherche de produits.mettre à jour les éléments dans Voir

Mon opinion est quelque chose comme ceci:

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

c'est productsScroller.xhtml

OT: Je ne sais pas pourquoi je dois utiliser pour afficher davantage de données, faites défiler tout simplement ne travail ...

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

et c'est ProduitsController (@Named et @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()); 
    } 
} 

la méthode searchProdByFeatures() fonctionne bien, mais le problème est que le dataScroller ne sera pas mise à jour ... Je sais qu'il ya quelque chose de mal dans la vue ... mais quoi?

ou il vaudra mieux mettre à jour la vue du contrôleur? Comment?

+0

NE PAS utiliser 'prependId = "false"'. Voir http://stackoverflow.com/questions/7415230/uiform-with-prependid-false-breaks-fajax-render – Kukeltje

Répondre

2

Modifier votre code pour upadate la dataScroller en ajoutant update = "yourIddataScroller"

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

désolé, j'ai oublié d'écrire le tag de mise à jour dans ma question ... j'utilisais update = "idContainerDataScroller" et il a renvoyé le contenu vide ... en utilisant IdDataScroller a corrigé le problème ... merci! – Marco