Java 使用ajax时,动态dataTable表单将删除其数组

Java 使用ajax时,动态dataTable表单将删除其数组,java,jsf,jsf-2,jsf-2.2,Java,Jsf,Jsf 2,Jsf 2.2,我有一个动态数据表,可以添加和删除对象。当我不使用ajax时,这很好用。但是,当我使用ajax时,会出现一个问题。最初添加值是可以的。但是,当我开始删除对象时,当我删除最后一个对象时,项目列表也会被删除并变为null。我将JSF2.2与primefaces一起使用。我不确定是什么导致了这个问题。我的代码如下 item.xhtml 钥匙 价值观 item.java @ManagedBean @ViewScoped public class Item implements Serializabl

我有一个动态数据表,可以添加和删除对象。当我不使用ajax时,这很好用。但是,当我使用ajax时,会出现一个问题。最初添加值是可以的。但是,当我开始删除对象时,当我删除最后一个对象时,项目列表也会被删除并变为null。我将JSF2.2与primefaces一起使用。我不确定是什么导致了这个问题。我的代码如下

item.xhtml


钥匙
价值观
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;
    }
}
@ManagedBean
@视域
公共类项实现可序列化{
public void addObject(){
Pair tempPair=新对(“,”);
项目。添加(临时对);
返回;
}
public void removeObject(第i对){
删除第(i)项;
返回;
}
}
更新1


我尝试改用JSF2.1,将viewAction更改为preRenderView,代码运行良好。

我认为ajax缺少更新属性。试试这个:

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

这是JSF2.2.0中的一个bug。我用javax-faces-2.2.1.jar替换了javax-faces-2.2.0.jar,问题就消失了

或者,另一种解决方案是将上面的
替换为:


显然,只要不呈现整个表单,ajax调用在jsf 2.2.0中就可以正常工作。

您是否尝试过限制ajax调用呈现的组件?您不必仅仅为了从表中删除一行而重新提交整个父级
。我已尝试将
f:ajax
更改为
,但尽管添加有效,删除无效。托管bean的范围是什么?您能显示完整的托管bean代码吗?
facet
基于您的注释的示例。不确定你是否还需要。安迪,谢谢你的例子。我已经编辑了我的代码,以包含完整的托管bean代码欢迎来到JSF2.2Hell。在过去的几天里,我自己也在和虫子搏斗。2.2.1版本是快照吗?@Andy不,我不这么认为。事实上,我相信它是昨天发布的。伟大的我准备放弃2.2了。我会试试的,谢谢。你可以尝试用process=“@form”替换execute=“@form”。