2012-07-17 12 views
6

वर्तमान में, मैं सॉर्टिंग/फ़िल्टरिंग क्षमताओं के साथ एक डाटाटेबल का उपयोग करके अपने डेटाबेस से सफलतापूर्वक छवि मेटाडेटा प्रदर्शित कर रहा हूं। मेरे डेटाटेबल के नीचे मैं एक तृतीय पक्ष छवि कवरफ्लो (http://www.jacksasylum.eu/ContentFlow/) का उपयोग कर अपनी छवियों को सफलतापूर्वक प्रदर्शित कर रहा हूं। मैं इस बिंदु पर दोनों को प्रदर्शित करने के लिए एक ही सूची का उपयोग कर रहा हूं। मेरे डेटाटेबल के भीतर अपना डेटा फ़िल्टर करने के बाद मुझे फ़िल्टर किए गए डेटाटेबल परिणामों के साथ अपने कवरफ्लो में अपनी छवि सूची को गतिशील रूप से अपडेट करने की आवश्यकता है।प्राइमफेस सेव/पास फ़िल्टर किए गए डेटाटेबल परिणाम सूची

प्राइमफेस का उपयोग करके ऐसा करने का सबसे अच्छा तरीका क्या है? क्या कोई मुझे एक कामकाजी उदाहरण की ओर इशारा करने में सक्षम होगा?

यहाँ मेरी कोड है:

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

उत्तर

8

मैं इस एक दिलचस्प कुए पाया शेर तो मैंने कुछ शोध किया। सबसे पहले मुझे हंसी मिली this। तब मैं this पर ठोकर खाई। इस सवाल का जवाब हो गया लगता है:

<p:datatable> को यह करें:

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

सेम में:

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

जानकारी के लिए धन्यवाद! मैंने इसे कार्यान्वित किया और आउटपुट पैनल में फ़िल्टर किए गए परिणाम प्रदर्शित कर सकते हैं! वर्तमान में, मैं एक डेटाटेबल के भीतर चयनित रिकॉर्ड की छवियों को प्रदर्शित करने की कोशिश कर रहा हूं। मुझे इस प्रश्न के दायरे के बाहर ContentFlow कार्यान्वयन के साथ कोई समस्या दिखाई देती है। आप यहां उस पर देख सकते हैं: http://stackoverflow.com/questions/11660247/display-db-images-using-contentflow-coverflow-illegalstateexception-error आपकी मदद के लिए धन्यवाद! – user1530469

+0

यह सुनकर अच्छा लगा कि आपकी प्रगति बढ़ रही है। यदि मेरा उत्तर आपके द्वारा पूछे गए प्रश्न का उत्तर देता है, तो उत्तर को स्वीकार करने के लिए स्वतंत्र महसूस करें, मुझे धन्यवाद कि सभी धन्यवाद ;-) रास्ते में स्टैक ओवरफ्लो में आपका स्वागत है। – siebz0r

0

इस में सभी टिप्पणियों और एक अन्य प्रश्न के लिए धन्यवाद।

मैं PrimeFaces 5.1 whith समाधान का हिस्सा होगा:

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; 
    } 
संबंधित मुद्दे