2014-11-29 2 views
0

Я немного застрял в части данных PrimeTaces. Я создал таблицу с встроенными методами rowEditor и sortBy, но когда я изменяю строку в таблице, порядок записей не обновляется.

Теоретически, он должен работать: update=":form:fruits". Но он не обновляет измененную строку. Поэтому я попытался обновить всю форму: update=":form". Но в этом случае я теряю все данные из таблицы, кроме обновленной, без каких-либо изменений.

ScreenShot01 ScreenShot02

Вот очень короткий пример кода, чтобы воспроизвести проблему.

Fruit.java:Основные данные dataTable sort after rowEdit

public class Fruit { 

    private Integer id; 
    private String name; 

    public Fruit(Integer id, String name) { 
     super(); 
     this.id = id; 
     this.name = name; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (!(o instanceof Fruit)) { 
      return false; 
     } 
     return id == ((Fruit) o).getId(); 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Fruits.java:

@ManagedBean(name = "fruits") 
@ViewScoped 
public class Fruits implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private ArrayList<Fruit> list = new ArrayList<Fruit>() { 
     { 
      add(new Fruit(1, "apple")); 
      add(new Fruit(2, "orange")); 
      add(new Fruit(3, "banana")); 
      add(new Fruit(4, "pineapple")); 
      add(new Fruit(5, "cocoa")); 
     } 
    }; 

    public void onRowEdit(RowEditEvent event) { 
     Fruit fruit = (Fruit) event.getObject(); 
     list.set(list.indexOf(fruit), fruit); 
    } 

    public ArrayList<Fruit> getList() { 
     return list; 
    } 

    public void setList(ArrayList<Fruit> list) { 
     this.list = list; 
    } 
} 

fruits.xhtml:

<h:head /> 

<h:body> 
    <h:form id="form"> 
     <p:dataTable id="fruits" value="#{fruits.list}" var="fruit" 
      editable="true" sortBy="#{fruit.name}"> 
      <p:ajax event="rowEdit" listener="#{fruits.onRowEdit}" update=":form"></p:ajax> 
      <p:column headerText="Name" sortBy="#{fruit.name}"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{fruit.name}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <h:inputText value="#{fruit.name}" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 
      <p:column> 
       <p:rowEditor /> 
      </p:column> 
     </p:dataTable> 
    </h:form> 
</h:body> 
</html> 

Любые идеи, как я мог бы исправить эту проблему?

+0

У меня такая же проблема, кто-нибудь нашел решение? – gregor

ответ

0

попробуйте использовать @form вместо: form используя: форму: фрукты - правильная форма, я не знаю, почему она не работает с вами.

0

Я уже пробовал все возможные ключевые слова (@this, @form, @all), но ни одна из них не помогла.
Сегодня я добавил кнопку «Обновить» до конца формы. С помощью этой кнопки я могу обновить таблицу, как ожидалось. Но я действительно не хочу и почему update=":form" не работает с событием «rowEdit».

<p:commandButton value="Refresh"> 
    <p:ajax update=":form"></p:ajax> 
</p:commandButton> 
0

Сегодня у меня была такая же проблема, и нашел обходной путь: Создать remoteCommand, который обновляет таблицу и называем это remoteCommand, как OnComplete действия после события cellEdit АЯКС.

Отрывок:

<h:form id="form"> 
    <p:remoteCommand name="remoteCmd" update="table" /> 

    <p:dataTable id="table" ...> 

     <p:ajax event="cellEdit" listener="#{anyClass.onCellEdit}" 
      oncomplete="remoteCmd();" /> 

     <p:column headerText="header"> 
      values 
     </p:column> 
    </p:dataTable> 
</h:form> 
Смежные вопросы