6

現在、並べ替え/フィルタリング機能を備えたデータテーブルを使用して、データベースから画像メタデータを正常に表示しています。データテーブルの下に、サードパーティの画像カバーフロー ( http://www.jacksasylum.eu/ContentFlow/ ) を使用して画像を正常に表示しています。この時点では、同じリストを使用して両方を表示しています。データテーブル内でデータをフィルタリングした後、フィルタリングされたデータテーブルの結果でカバーフローの画像リストを動的に更新する必要があります。

PrimeFaces を使用してこれを行う最善の方法は何ですか? 誰かが私を実際の例に向けることができますか?

これが私のコードです:

スクリーンショットData.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;
   }
4

2 に答える 2

8

これは興味深い質問だと思ったので、調査を行いました。最初にこれを見つけて笑った。それから私はこれに出くわしまし。答えは次のようです。

これをに追加します<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;
   }
于 2012-07-17T12:37:10.727 に答える
0

これと他の質問のすべてのコメントに感謝します。

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-11-09T07:06:38.343 に答える