2013-07-09 3 views
0

У меня есть динамическая dataTable, которая добавляет и удаляет объекты. Это отлично работает, когда я не использую ajax. Однако, когда я использую ajax, возникает проблема. Вначале добавление значений прекрасное. Однако, когда я начинаю удалять объекты, когда я удаляю последний объект, список элементов также удаляется и становится нулевым. Я использую jsf 2.2 с первичными. Я не уверен, что вызывает эту проблему. Мой код выглядит следующим образом.Dynamic dataTable form удаляет свой массив при использовании ajax

item.xhtml

<h:panelGroup id="list"> 
    <h:dataTable value="#{item.items}" var="object"> 
     <h:column> 
      <!-- Figure out what these facets are or delete them --> 
      <f:facet name="keys">Keys</f:facet> 
      <p:inputText value="#{object.x}" /> 
     </h:column> 
     <h:column headerText="Values"> 
      <f:facet name="values">Values</f:facet> 
      <p:inputText value="#{object.y}" /> 
     </h:column> 
     <h:column> 
      <h:commandLink value="Delete" action="#{user.removeObject(object)}"> 
       <f:ajax execute="@form" render="@form" /> 
      </h:commandLink> 
     </h:column> 
    </h:dataTable> 
    <h:commandButton value="add" action="#{user.addObject}"> 
     <f:ajax execute="@form" render="@form" /> 
    </h:commandButton> 
</h:panelGroup> 

item.java

@ManagedBean 
@ViewScoped 
public class Item implements Serializable{ 
    public void addObject(){ 
     Pair<String,String> tempPair = new Pair<String,String>("",""); 
     items.add(tempPair); 
     return; 
    } 

    public void removeObject(Pair<String,String> i){ 
     items.remove(i); 
     return; 
    } 
} 

UPDATE 1

Я попытался с помощью JSF 2.1 вместо этого, меняю viewAction к preRenderView, и мой код работает отлично ,

+1

Вы пытались ограничить компоненты, оказанные вашим вызовом ajax? Вам не нужно переписывать весь родительский '' просто для удаления строки из таблицы. – Gamb

+0

Я попытался изменить 'f: ajax' на' ', но, хотя добавление работает, удаление не работает. – user2471366

+0

Какова область действия управляемого компонента? Можете ли вы показать полный код управляемого компонента? –

ответ

0

Я думаю, что у ajax отсутствуют свойства обновления. Попробуйте следующее:

<f:ajax execute="@form" render="@form" update="@form"/> 
+0

Я пробовал это, и он не работает. – user2471366

+0

Вы можете попробовать заменить execute = "@ form" на process = "@ form". –

0

Это ошибка в jsf 2.2.0. Я заменил javax-faces-2.2.0.jar на javax-faces-2.2.1.jar, и проблема исчезла.

Альтернативно, другое решение заменить <f:ajax> выше:

<f:ajax execute="@form" render=":form:list">

По-видимому, вызов Ajax штраф в JSF 2.2.0 до тех пор, как вся форма не визуализируется работает.

+0

Добро пожаловать в JSF 2.2. Последние несколько дней я борется с ошибками. Версия 2.2.1 - это моментальный снимок? – Andy

+0

@ Энди Нет, я так не думаю. Я считаю, что это было выпущено вчера, на самом деле. https://maven.java.net/content/repositories/releases/org/glassfish/javax.faces/2.2.1/ – user2471366

+0

Отлично. Я был готов отказаться от 2.2. Я дам эту благодарность. – Andy