目前,我正在使用具有排序/过滤功能的数据表从我的数据库成功显示图像元数据。在我的数据表下面,我使用第三方图像封面流程(http://www.jacksasylum.eu/ContentFlow/)成功显示我的图像。我正在使用相同的列表来显示这两个。在我的数据表中过滤数据后,我需要使用过滤的数据表结果动态更新我的coverflow中的图像列表。
使用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>
...............
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;
}
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}