2012-07-17 43 views
6

Actualmente, estoy mostrando los metadatos de imágenes con éxito desde mi base de datos usando una tabla de datos con capacidades de clasificación/filtrado. Debajo de mi tabla de datos estoy mostrando mis imágenes con éxito utilizando un flujo de imagen de terceros (http://www.jacksasylum.eu/ContentFlow/). Estoy usando la misma lista para mostrar ambos en este punto. Después de filtrar mis datos dentro de mi datatable, necesito actualizar dinámicamente mi lista de imágenes en mi flujo de cobertura con los resultados de la tabla de datos filtrada.Primefaces Guardar/Pasar Lista de resultados de DataTable filtrada

¿Cuál es la mejor manera de hacerlo con PrimeFaces? ¿Alguien podría indicarme un ejemplo de trabajo?

Aquí está mi código:

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

Respuesta

8

me encontré con esto una Que interesante stion así que investigué un poco. Primero me reí al encontrar this. Luego me encontré con this. La respuesta parece ser:

añadir esto a la <p:datatable>:

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

En el frijol:

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

Gracias por la info! ¡Implementé esto y puedo mostrar los resultados filtrados en un OutputPanel! Actualmente, he estado tratando de mostrar imágenes de registros seleccionados dentro de una tabla de datos. Parece que tengo un problema con la implementación de ContentFlow fuera del alcance de esta pregunta. Puede verlo aquí: http://stackoverflow.com/questions/11660247/display-db-images-using-contentflow-coverflow-illegalstateexception-error Gracias de nuevo por su ayuda !! – user1530469

+0

Es bueno escuchar que su progreso. Si mi respuesta responde a la pregunta que me hizo, no dude en marcar la respuesta como aceptada, son todas las gracias que necesito ;-) Bienvenido a stackoverflow por cierto. – siebz0r

0

Gracias por los todos los comentarios en este y en otros una pregunta.

voy a compartir un poco con la solución 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; 
    } 
Cuestiones relacionadas