<p:ajax event="sort"
出于某种奇怪的原因,当我使用inside时,我无法处理我的数据<p:dataTable
,而它适用于<p:ajax event="page"
和<p:ajax event="filter"
我将 myfaces 2.0.11 与 primefaces 3.4 一起使用(尝试使用 4.0 快照)
如果我编辑我的单元格输入并执行PAGINATE我确实会在侦听器方法中看到单元格的更新值
如果我编辑我的单元格输入并进行排序,我在侦听器方法中看不到单元格的更新值,知道为什么吗?我的意思是 p:ajax (sort/page) 都得到了 process="@form" 那么为什么它不处理呢?我检查了 chrome 开发工具的网络,在这两种情况下(排序/页面),相关的更新值都被发送到服务器,但由于某种原因,在排序侦听器中值没有更新,
顺便说一句,页面和排序 ajax 请求之间唯一可疑的区别是以下仅存在于排序请求中的参数是:
my_table_skipChildren:true
, 这是什么意思?跳过处理?
我可以从 ExternalContext 的请求中获取相关的 ids+value,但这只是最后的手段
这是一个非常简单的例子
会话作用域 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;
}
}
我的对象代码
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 论坛上问过,但没有得到回应)
尝试过安迪解决方法(添加editable="true"
到表中,但它没有好处
场景如下:更改输入文本的某些值,然后单击表格列标题进行排序
期望:在 detectSortEvent 侦听器中,我看到列表中的更新值
现实:列表中的旧值相同
问候,
丹尼尔。