我创建了一个PrimeFaces数据表:
<p:dataTable id="locationTable" value="#{bean.object}" var="item"
paginator="true"
rows="10"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink}{LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,20,30,50,100">
...
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
我想保存每页行数的下拉框值.当用户更改值时,我该如何捕获该事件?所以我可以读取并保存其中一个"5,10,15,20,30,50,100"值,以便下次用户返回此页面时自动显示该值.目前,它没有保存,因此每次(重新)加载页面时,它都会返回默认值"10".
你可以这样做:
风景
<h:form id="mainForm">
<p:dataTable id="locationTable" value="#{datatableBean.list}" var="item"
paginator="true" widgetVar="dtVar"
rows="#{datatableBean.rows}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="1,2,3,4,5,6">
<p:column>
#{item.name}
</p:column>
</p:dataTable>
<p:remoteCommand name="persistRows" action="#{datatableBean.saveRows}" process="@this"
update="rows" global="false" />
<h:outputText id="rows" value="#{datatableBean.rows}" />
<script>
jQuery(document).ready(function() {
dtVar.paginator.rppSelect.change(function() {
persistRows([{name: 'rows', value: this.value}]);
});
});
</script>
</h:form>
Run Code Online (Sandbox Code Playgroud)
豆
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class DatatableBean implements Serializable {
private int rows;
private List<SimpleBean> list;
@PostConstruct
public void setup() {
//default rows value
rows = 2;
list = new ArrayList<SimpleBean>();
//ID and Name
list.add(new SimpleBean(11, "A"));
list.add(new SimpleBean(22, "B"));
list.add(new SimpleBean(33, "C"));
}
public void saveRows(){
FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
String rowsStr = (String) map.get("rows");
rows = Integer.parseInt(rowsStr);
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public List<SimpleBean> getList() {
return list;
}
public void setList(List<SimpleBean> list) {
this.list = list;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的策略是扩展与paginator呈现的html 选择标记关联的onchange事件.为了促进这项任务,我在数据表(dtVar)中设置了wigetVar,知道它的客户端api通过dtVar.paginator.rppSelect给我们两个选择.
现在,为了能够将这些选择的值发送到托管bean,我们可以使用remoteCommand.使用remoteCommand组件,我们可以将javascript参数发送到managedbean.我命名的remoteCommand如persistRows并通过调用它我指定使用由所述部件所需的图案的额外的参数:[{名称:"行",值:THIS.VALUE}]([{名称:"nameOfTheVariable" ,value:'valueOfTheVariable'}]).
现在,您可以使用该行属性执行任何操作.
| 归档时间: |
|
| 查看次数: |
10909 次 |
| 最近记录: |