1

<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 侦听器中,我看到列表中的更新值

现实:列表中的旧值相同

问候,

丹尼尔。

4

0 回答 0