由于某些奇怪的原因,我在<p:ajax event="sort"
内使用<p:dataTable
时无法处理我的数据,而<p:ajax event="page"
和<p:ajax event="filter"
的效果很好
我正在使用myfaces 2.0.11和primefaces 3.4(尝试使用4.0快照)
如果我编辑单元格输入并执行 PAGINATE , 执行 ,请查看单元格的更新值监听方法
如果我编辑单元格输入并执行 SORT , 不 ,请查看单元格的更新值在听众方法中,Any Idea为什么?我的意思是p:ajax(sort / page)得到了进程=“@ form”所以为什么它不处理?我检查了chrome dev工具的网络,并且在两种情况下(sort / page)都将相关的更新值发送到服务器,但由于某种原因,在sort侦听器中值不会更新,
b.t.w页面和排序ajax请求之间唯一可疑的区别是以下仅在排序请求中出现的参数是:
my_table_skipChildren:true
,这是什么意思?跳过处理?
我可以从ExternalContext的请求中获取相关的id +值,但它只是最后的手段
这是一个非常简单的例子
会话范围Bean代码:
@ManagedBean
@SessionScoped
public class myBean {
private List<MyObject> myList = new ArrayList<MyObject>();
@PostConstruct
public void init() {
myList.add(new MyObject("1", "2"));
myList.add(new MyObject("11", "22"));
myList.add(new MyObject("111", "222"));
myList.add(new MyObject("1a", "2a"));
myList.add(new MyObject("11a", "22a"));
myList.add(new MyObject("111a", "222a"));
}
public List<MyObject> getMyList() {
return myList;
}
public void setMyList(List<MyObject> myList) {
this.myList = myList;
}
}
MyObject代码
public class MyObject {
private String one;
private String two;
public MyObject(String one, String two) {
super();
this.one = one;
this.two = two;
}
public String getOne() {
return one;
}
public void setOne(String one) {
this.one = one;
}
public String getTwo() {
return two;
}
public void setTwo(String two) {
this.two = two;
}
}
XHTML:
<p:dataTable id="my_table" value="#{myBean.myList}"
var="deviceRow" widgetVar="myTable"
paginator="true" rows="4" paginatorPosition="bottom"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">
<p:ajax process="@form" event="sort" listener="#{myBean.detectSortEvent}"></p:ajax>
<p:ajax process="@form" event="page" listener="#{myBean.detectPageEvent}"></p:ajax>
<p:column id="table_selection_column_one" sortBy="#{deviceRow.one}" filterBy="#{deviceRow.one}">
<f:facet name="header">
<h:outputText value="Column One" />
</f:facet>
<h:inputText id="myRow_One" value="#{deviceRow.one}" />
</p:column>
<p:column id="table_selection_column_two" sortBy="#{deviceRow.two}" filterBy="#{deviceRow.two}">
<f:facet name="header">
<h:outputText value="Column Two" />
</f:facet>
<h:inputText id="myRow_Two" value="#{deviceRow.two}" />
</p:column>
</p:dataTable>
(我也在primefaces论坛上问过但没有回复)
尝试 Andy 解决方法(将editable="true"
添加到表中,但它不好
方案如下:更改输入文本的某些值,而不是单击表列标题进行排序
期望:在detectSortEvent侦听器内部,我看到列表中的更新值
Reality :列表中的旧值
此致
丹尼尔。