【问题标题】:Primefaces Save/Pass Filtered DataTable Results ListPrimefaces 保存/通过过滤的数据表结果列表
【发布时间】:2012-07-15 23:05:50
【问题描述】:

目前,我正在使用具有排序/过滤功能的数据表从我的数据库中成功显示图像元数据。在我的数据表下方,我使用第三方图像封面流 (http://www.jacksasylum.eu/ContentFlow/) 成功显示了我的图像。我现在使用相同的列表来显示两者。在我的数据表中过滤我的数据后,我需要使用过滤后的数据表结果动态更新我的封面流中的图像列表。

使用 PrimeFaces 的最佳方法是什么?谁能给我指出一个可行的例子?

这是我的代码:

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

截图.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;
   }

【问题讨论】:

    标签: primefaces filter datatable render


    【解决方案1】:

    我发现这是一个有趣的问题,所以我做了一些研究。首先,我发现this 很开心。然后我偶然发现了this。答案似乎是:

    将此添加到&lt;p:datatable&gt;

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

    在 bean 中:

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

    【讨论】:

    • 感谢您的信息!我实现了这一点,并且可以在 outputPanel 中显示过滤后的结果!目前,我一直在尝试在数据表中显示选定记录的图像。我似乎对这个问题范围之外的 ContentFlow 实现有疑问。您可以在这里查看那个:stackoverflow.com/questions/11660247/… 再次感谢您的帮助!
    • 很高兴听到您的进步。如果我的回答回答了您提出的问题,请随时将答案标记为已接受,这就是我需要的全部感谢 ;-) 顺便欢迎使用 stackoverflow。
    【解决方案2】:

    感谢所有 cmets 在这个问题和其他问题。

    我将分享 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;
        }
    

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2018-01-24
      相关资源
      最近更新 更多