Jsf 读取primefaces数据表要显示的正确行数
我有一个这样的数据表Jsf 读取primefaces数据表要显示的正确行数,jsf,primefaces,datatable,Jsf,Primefaces,Datatable,我有一个这样的数据表 <pf:dataTable id="#{controller.tableComponentId}" rows="#{controller.rowsPerPage}" rowsPerPageTemplate="#{controller.rowsPerPageTemplate}" <pf:ajax event="page" listener="#{controller.onPageChange}"/> /> 我
<pf:dataTable id="#{controller.tableComponentId}"
rows="#{controller.rowsPerPage}"
rowsPerPageTemplate="#{controller.rowsPerPageTemplate}"
<pf:ajax event="page" listener="#{controller.onPageChange}"/>
/>
我的问题是,当用户更改要显示的行数时。页面事件已激发,但具有旧的行值。因此,如果行的初始值为10,则用户将其更改为25。我仍然读取值10,然后JSF调用rowsPerPage setter
我知道这个线程基本上是相同的问题。我尝试了这里提到的解决方案,但对我不起作用。我也使用分页,但为了简单起见,我没有把它放在我的代码中
我还尝试使用process=“@form”并读取请求参数映射,但ajax请求中没有发送“dt_rppDD”值。还有其他建议吗?在页面事件侦听器中获取行
第页:
数据表页
支持bean:
package org.antonu17;
import org.omnifaces.cdi.ViewScoped;
import org.omnifaces.util.Faces;
import org.primefaces.event.data.PageEvent;
import javax.faces.component.UIComponent;
import javax.inject.Named;
import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Named("datatablePage")
@ViewScoped
public class DatatablePage implements Serializable {
private String tableComponentId = "table";
private Integer rows = 20;
private String rowsPerPageTemplate = "20,30,40,50";
private List<Integer> list = IntStream.range(1,200).boxed().collect(Collectors.toList());
public void onPageChange(PageEvent event) {
System.out.println(Faces.getRequestParameter(((UIComponent)event.getSource()).getClientId().concat("_rows")));
}
public String getTableComponentId() {
return tableComponentId;
}
public void setTableComponentId(String tableComponentId) {
this.tableComponentId = tableComponentId;
}
public Integer getRows() {
return rows;
}
public void setRows(Integer rows) {
this.rows = rows;
}
public String getRowsPerPageTemplate() {
return rowsPerPageTemplate;
}
public void setRowsPerPageTemplate(String rowsPerPageTemplate) {
this.rowsPerPageTemplate = rowsPerPageTemplate;
}
public List<Integer> getList() {
return list;
}
}
package org.antonu17;
导入org.omnifaces.cdi.ViewScoped;
导入org.omnifaces.util.Faces;
导入org.primefaces.event.data.PageEvent;
导入javax.faces.component.UIComponent;
导入javax.inject.Named;
导入java.io.Serializable;
导入java.util.List;
导入java.util.stream.collector;
导入java.util.stream.IntStream;
@命名(“datatablePage”)
@视域
公共类DatatablePage实现了可序列化{
私有字符串tableComponentId=“table”;
私有整数行=20;
私有字符串rowsPerPageTemplate=“20,30,40,50”;
private List List=IntStream.range(1200).boxed().collect(Collectors.toList());
公共无效onPageChange(PageEvent事件){
System.out.println(Faces.getRequestParameter(((UIComponent)event.getSource()).getClientId().concat(“_行”));
}
公共字符串getTableComponentId(){
返回tableComponentId;
}
public void setTableComponentId(字符串tableComponentId){
this.tableComponentId=tableComponentId;
}
公共整数getRows(){
返回行;
}
公共void集合行(整数行){
this.rows=行;
}
公共字符串getRowsPerPageTemplate(){
返回rowsPerPageTemplate;
}
公共void setRowsPerPageTemplate(字符串rowsPerPageTemplate){
this.rowsPerPageTemplate=rowsPerPageTemplate;
}
公共列表getList(){
退货清单;
}
}
在页面事件侦听器中获取行
第页:
数据表页
支持bean:
package org.antonu17;
import org.omnifaces.cdi.ViewScoped;
import org.omnifaces.util.Faces;
import org.primefaces.event.data.PageEvent;
import javax.faces.component.UIComponent;
import javax.inject.Named;
import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Named("datatablePage")
@ViewScoped
public class DatatablePage implements Serializable {
private String tableComponentId = "table";
private Integer rows = 20;
private String rowsPerPageTemplate = "20,30,40,50";
private List<Integer> list = IntStream.range(1,200).boxed().collect(Collectors.toList());
public void onPageChange(PageEvent event) {
System.out.println(Faces.getRequestParameter(((UIComponent)event.getSource()).getClientId().concat("_rows")));
}
public String getTableComponentId() {
return tableComponentId;
}
public void setTableComponentId(String tableComponentId) {
this.tableComponentId = tableComponentId;
}
public Integer getRows() {
return rows;
}
public void setRows(Integer rows) {
this.rows = rows;
}
public String getRowsPerPageTemplate() {
return rowsPerPageTemplate;
}
public void setRowsPerPageTemplate(String rowsPerPageTemplate) {
this.rowsPerPageTemplate = rowsPerPageTemplate;
}
public List<Integer> getList() {
return list;
}
}
package org.antonu17;
导入org.omnifaces.cdi.ViewScoped;
导入org.omnifaces.util.Faces;
导入org.primefaces.event.data.PageEvent;
导入javax.faces.component.UIComponent;
导入javax.inject.Named;
导入java.io.Serializable;
导入java.util.List;
导入java.util.stream.collector;
导入java.util.stream.IntStream;
@命名(“datatablePage”)
@视域
公共类DatatablePage实现了可序列化{
私有字符串tableComponentId=“table”;
私有整数行=20;
私有字符串rowsPerPageTemplate=“20,30,40,50”;
private List List=IntStream.range(1200).boxed().collect(Collectors.toList());
公共无效onPageChange(PageEvent事件){
System.out.println(Faces.getRequestParameter(((UIComponent)event.getSource()).getClientId().concat(“_行”));
}
公共字符串getTableComponentId(){
返回tableComponentId;
}
public void setTableComponentId(字符串tableComponentId){
this.tableComponentId=tableComponentId;
}
公共整数getRows(){
返回行;
}
公共void集合行(整数行){
this.rows=行;
}
公共字符串getRowsPerPageTemplate(){
返回rowsPerPageTemplate;
}
公共void setRowsPerPageTemplate(字符串rowsPerPageTemplate){
this.rowsPerPageTemplate=rowsPerPageTemplate;
}
公共列表getList(){
退货清单;
}
}
我找到了解决问题的方法,但与我提出的问题无关。当我使用自己的PaginatorElementRenderer
实现时,JSF没有使用我的类,而是使用默认类
这个链接中的问题是解释我的问题和解决方案
由于我使用的是比5.1旧的版本,我不得不使用反射来访问映射并设置自己的类 我找到了解决问题的办法,但与我提出的问题无关。当我使用自己的
PaginatorElementRenderer
实现时,JSF没有使用我的类,而是使用默认类
这个链接中的问题是解释我的问题和解决方案
由于我使用的是比5.1旧的版本,我不得不使用反射来访问映射并设置自己的类 在触发
onPageChange(PageEvent事件)
后,在RENDER_响应时触发rowsPerPage setter。如果您需要新行值,可以将其作为Faces.getRequestParameter(((UIComponent)event.getSource()).getClientId().concat(“\u行”)
rowsPerPage setter在触发onPageChange(PageEvent事件)
后在RENDER\u响应时触发。如果需要新行值,可以通过Faces.getRequestParameter(((UIComponent)event.getSource()).getClientId().concat(“\u行”))获取该值。
我接受您的答案,因为它是原始问题的解决方案。谢谢,我接受你的回答,因为这是解决原来问题的办法。非常感谢。