2012-07-17 6 views
6

Attualmente, sto visualizzando correttamente i metadati delle immagini dal mio database utilizzando un datatable con capacità di ordinamento/filtraggio. Sotto il mio datatable sto visualizzando correttamente le mie immagini usando un coverflow di immagini di terze parti (http://www.jacksasylum.eu/ContentFlow/). Sto usando la stessa lista per visualizzare entrambi a questo punto. Dopo aver filtrato i miei dati all'interno del mio datatable ho bisogno di aggiornare dinamicamente la mia lista di immagini nel mio coverflow con i risultati databili filtrati.Primefaces Salva/Passa Elenco risultati filtrati DataTable

Qual è il modo migliore per farlo utilizzando PrimeFaces? Qualcuno potrebbe indicarmi un esempio funzionante?

Ecco il mio codice:

screenshotData.xhtml

<h:form> 
     <p:dataTable var="scrshot" value="#{screenshots}" paginator="true" rows="8" 
       paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
       rowsPerPageTemplate="5,10,15" widgetVar="dataTable" draggableColumns="true" 
       emptyMessage="No screenshot data found with given criteria"> 
      <f:facet name="header"> 
      <p:outputPanel> 
       <h:outputText value="Search all fields:"/> 
       <p:inputText id="globalFilter" onkeyup="dataTable.filter()" style="width:150px" /> 
      </p:outputPanel> 
      </f:facet> 
      <p:column headerText="Time" sortBy="#{scrshot.time}" filterBy="#{scrshot.time}" filterMatchMode="startsWith"> 
      <h:outputText value="#{scrshot.time}" /> 
      </p:column> 
      <p:column headerText="Id" sortBy="#{scrshot.id}" filterBy="#{scrshot.id}" filterMatchMode="startsWith"> 
      <h:outputText value="#{scrshot.id}" /> 
      </p:column> 
      <p:column headerText="User" sortBy="#{scrshot.user}" filterBy="#{scrshot.user}" filterMatchMode="startsWith"> 
      <h:outputText value="#{scrshot.user}" /> 
      </p:column> 
      </p:dataTable> 
     </h:form>  
     <br/> 
     <h:form> 
      <p:outputPanel id="imgBlock" layout="block"> 
      <div class="ContentFlow" style="width: 1400px; height: 500px" align="center"> 
      <div class="loadIndicator"><div class="indicator"></div></div> 
      <div class="flow"> 
       <a4j:repeat var="img" value="#{screenshots}" rendered="true"> 
       <div class="item">  
        <img class="content" id="images" src="ImgServlet?id=#{img.id}" title="#{img.time}" draggable="true"/> 
        <div class="label">#{img.id}</div> 
        </div> 
       </a4j:repeat> 
      </div>   
      <div class="globalCaption"></div> 
      <div class="scrollbar"><div class="slider"><div class="position"></div></div></div> 
      </div> 
     </p:outputPanel> 
     </h:form> 
............... 

Screenshot.java

@Entity 
@XmlRootElement 
@Table(name="imgTable", uniqueConstraints = @UniqueConstraint(columnNames = "id")) 
public class Screenshot implements Serializable, PhotoInterface { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    private Long id; 
    private String user; 
    private Timestamp time; 
-------- Getters/Setters --------- 

ScreenshotListProducer.java

@RequestScoped 
public class ScreenshotListProducer { 
    @Inject 
    private EntityManager em; 

    private List<Screenshot> screenshots; 

    @Produces 
    @Named 
    public List<Screenshot> getScreenshots() { 
     return screenshots; 
    } 

risposta

8

Ho trovato questo un interessante que stion così ho fatto qualche ricerca. Per prima cosa ho avuto una risata trovando this. Poi sono incappato in this. La risposta sembra essere:

Aggiungere questo al <p:datatable>:

<p:ajax event="filter" listener="#{bean.onFilter}" update = "@this"/> 

nel chicco:

public Map<String, String> onFilter(AjaxBehaviorEvent event) { 
     DataTable table = (DataTable) event.getSource(); 
     List<Screenshot> obj = table.getFilteredData(); 

     // Do your stuff here 

     Map<String, String> filters = table.getFilters(); 
     return filters; 
    } 
+0

Grazie per le informazioni! Ho implementato questo e posso visualizzare i risultati filtrati in un outputPanel! Attualmente, ho cercato di visualizzare le immagini dei record selezionati all'interno di un datatable. Sembra che ci sia un problema con l'implementazione di ContentFlow al di fuori dello scopo di questa domanda. Puoi guardare quello qui: http://stackoverflow.com/questions/11660247/display-db-images-using-contentflow-coverflow-illegalstateexception-error Grazie ancora per il tuo aiuto !! – user1530469

+0

È bello sapere che stai facendo progressi. Se la mia risposta risponde alla domanda che hai posto, sentiti libero di contrassegnare la risposta come accettata, questo è tutto il ringraziamento di cui ho bisogno ;-) Benvenuto nello stackoverflow tra l'altro. – siebz0r

0

Grazie per i tutti i commenti di questo ed un altro domande.

Voglio condividere la soluzione whith primefaces 5.1:

public Map<String, Object> onFilter(AjaxBehaviorEvent event) { 
     System.out.println("FILTRAMOS LA TABLA"); 
     DataTable table = (DataTable) event.getSource(); 
     List<Actual> obj = table.getFilteredValue(); 

     listaActivosFijosFiltrados = obj; 

     if (obj != null) { 
      System.out.println("filtered = " + obj.size()); 
     } else { 
      System.out.println("No records found"); 
     } 

     Map<String, Object> filters = table.getFilters(); 
     return filters; 
    }