Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax @ViewScope中未调用嵌套jsf侦听器_Ajax_Jsf_Listener - Fatal编程技术网

Ajax @ViewScope中未调用嵌套jsf侦听器

Ajax @ViewScope中未调用嵌套jsf侦听器,ajax,jsf,listener,Ajax,Jsf,Listener,目前我有一个类似的问题 在解决了这个问题后,我将Mojarra升级到2.1.16版。 在我实现下面提到的视图之前,一切都很好。 代码被简化为基本内容 xhtml: //侦听器被称为 //没有调用侦听器! 豆子: @ManagedBean(name=“testBean”) @视域 公共类TestBean{ 私人收藏测试列表; 公共集合getTestList(){ 返回这个.testList; } //听众 公共void testListener(){ ... } } 即使我将ui:r

目前我有一个类似的问题
在解决了这个问题后,我将Mojarra升级到2.1.16版。
在我实现下面提到的视图之前,一切都很好。
代码被简化为基本内容


xhtml:


//侦听器被称为
//没有调用侦听器!

豆子:

@ManagedBean(name=“testBean”)
@视域
公共类TestBean{
私人收藏测试列表;
公共集合getTestList(){
返回这个.testList;
}
//听众
公共void testListener(){
...
}
}

即使我将
ui:repeat
更改为
c:forEach
,问题也是一样的
如果我使用
@SessionScope
而不是
@ViewScope
,第二个commandLink(在迭代中)调用侦听器。但是我想避免在这个bean中使用
@SessionScope



关于这个问题的原因和如何处理,你有什么提示吗?

你能在
@PostConstruct
方法上设置断点,看看在单击
ui:repeat
内的链接后是否调用它吗?只是检查是否在AJAX请求上重新创建了bean。是的,在两个AJAX请求上都重新创建了bean。因此,重新初始化的集合包含的对象不是用
ui:repeat
列出的对象。这意味着jsf无法在dom树中找到集合的对象,因此不会调用侦听器的嵌套对象!?但是
c:forEach
不应该避免这个问题吗?你能发布整个页面的代码吗?
<form>
  <div>
    // listener is called
    <h:commandLink value="test1">
      <f:ajax event="click" listener="#{testBean.testListener}" />
    </h:commandLink>
    <ui:repeat var="testList" value="#{testBean.testList}">
      // listener is not called !
      <h:commandLink value="test2">
        <f:ajax event="click" listener="#{testBean.testListener}" />
      </h:commandLink>          
    </ui:repeat>
  </div>
</form>
@ManagedBean(name="testBean")
@ViewScoped
public class TestBean {
  private Collection<TestObj> testList;
  public Collection<TestObj> getTestList() {
    return this.testList;
  }

  // the listener
  public void testListener() {
    ...
  }
}