p:ajax event = p的“sort”:dataTable不处理

时间:2013-07-23 07:08:45

标签: jsf-2 primefaces

由于某些奇怪的原因,我在<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 :列表中的旧值

此致

丹尼尔。

0 个答案:

没有答案