Java 关于填充ArrayList的JSF Ajax问题

Java 关于填充ArrayList的JSF Ajax问题,java,ajax,jsf,jsf-2,ajax4jsf,Java,Ajax,Jsf,Jsf 2,Ajax4jsf,我编写了一个JSF页面,用来帮助客户机选择要添加到ArrayList列表中的项。当selectonemenu的值更改时,我使用Ajax来实现操作 当应用程序运行时,没有异常,当Ajax被触发时,操作就会生效。然而,它似乎并没有持续下去。换句话说,每次启动操作时,都会将对象添加到列表中,但在下一次启动时,列表将重置为0,并且只有新添加的对象在其中 我的代码: 豆子: JSF: 如何修复它?您是否尝试使用a4j:commandLink而不是嵌套在h:commandLink中的a4j:ajax 由于h

我编写了一个JSF页面,用来帮助客户机选择要添加到ArrayList列表中的项。当selectonemenu的值更改时,我使用Ajax来实现操作

当应用程序运行时,没有异常,当Ajax被触发时,操作就会生效。然而,它似乎并没有持续下去。换句话说,每次启动操作时,都会将对象添加到列表中,但在下一次启动时,列表将重置为0,并且只有新添加的对象在其中

我的代码:

豆子:

JSF:

如何修复它?

您是否尝试使用a4j:commandLink而不是嵌套在h:commandLink中的a4j:ajax


由于h:commandLink的click事件本身没有像onclick=return false;,那样被阻止;,它似乎正在通过刷新页面来清除列表。

托管bean的范围是什么?会话范围是什么!尝试在@ViewScoped处呈现它。会话作用域是什么?我将它与其他一些工作正常的Ajax操作一起使用。这次是唯一的失败。你说的下一次发射是什么意思?
//Assume all necessary imports have been made
public class MBean
{
  private List<SomethingElse> objects;
  private List<SomethingElse> toFill;

  public MBean()
  {
         toFill = new ArrayList();
         //Let's assume that the list is correctly created and populated in here
  }

  public void addObjectToList(AjaxBehaviorEvent event)
  {
      try
      {
          SomethingElse obj = (SomethingElse) event.getNewValue();
          toFill.add(obj);
      }
      catch(Exception e)
      {
          e.printStackTrace();
      }
  }

  public List<SomethingElse> getObjects()
  {
         return objects;
  }

  public void setObjects(List<SomethingElse> objects)
  {
         this.objects = objects;
  }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:rich="http://richfaces.org/rich"
  xmlns:a4j="http://richfaces.org/a4j">
<h:head>
<title>AJAX or SELECTONEMENU ISSUE</title>
<meta charset="utf-8"/>
</h:head>
<h:body>
    <f:view encoding="utf-8">
            <section>

                        <h:form id="testForm">
                            <h:dataTable id="showTb" value="#{mBean.toFill}"
                                         var="det" cellpadding="5px" rows="0">
                                <f:facet name="header">
                                    Added objects
                                </f:facet>
                                <h:column>
                                    <h:outputText value="#{det}"/>
                                </h:column>
                            </h:dataTable><br/>

                            <a4j:region>
                            <h:selectOneMenu converter="#{aConverter}">      
<!-- Assume converter is working-->
                                <f:selectItem itemLabel="Object to add" itemValue=""/>
                                <f:selectItems value="#{mBean.objects}" var="o"/>
                            </h:selectOneMenu><br/>
                            <h:commandLink value="Add">
                                <a4j:ajax event="click" execute="@region" 
listener="#{mBean.addObjectToList}" render="showTb"/>
                            </h:commandLink>
                            </a4j:region>

                            <br/><br/>
                        </h:form>

                        </section>
      </f:view>
</h:body>
</html>