Ajax要么只呈现一次,要么不会在jsf2中更新

Ajax要么只呈现一次,要么不会在jsf2中更新,ajax,jsf,jsf-2,Ajax,Jsf,Jsf 2,我有两个数据表,我想在这些表中前后移动行。 我使用AJAX将数据从一个列表移动到另一个列表。但是AJAX只渲染视图一次 <h:dataTable id="tbl1" value="#{Bean.selected_tasks}" var="o"> <h:column> <f:facet name="header">id</f:facet> <h:commandLink value="#{o.task_id}" &g

我有两个数据表,我想在这些表中前后移动行。 我使用AJAX将数据从一个列表移动到另一个列表。但是AJAX只渲染视图一次

<h:dataTable id="tbl1"  value="#{Bean.selected_tasks}" var="o">
   <h:column>
     <f:facet name="header">id</f:facet>
     <h:commandLink  value="#{o.task_id}" >
       <f:param name="task_id" value="#{o.task_id}" />
       <f:ajax event="click" render=":tbl2" listener="#{Bean.itemSelected1}"/>
     </h:commandLink>
   </h:column>
</h:dataTable>

<h:dataTable id="tbl2"  value="#{Bean.tasks}" var="o">
   <h:column>
     <f:facet name="header">id</f:facet>
     <h:commandLink  value="#{o.task_id}" >
       <f:param name="task_id" value="#{o.task_id}" />
       <f:ajax event="click" render=":tbl1" listener="#{Bean.itemSelected2}"/>
     </h:commandLink>
   </h:column>
</h:dataTable>

身份证件
身份证件
这仅在我第一次单击commandLink时起作用,如果我再次单击它,甚至不会调用itemSelected函数,当渲染参数为“@form:tbl1”时也会发生同样的情况 但我也尝试将render参数设置为“@this”和“@form”,这将调用函数一次,但不会更改视图。 但当参数为“@all”时,始终调用函数,但从不渲染视图

@ManagedBean (name="Project_Questions")
@ViewScoped
public class Project_Questions implements Serializable {
    @SuppressWarnings("compatibility:-502509661122908883")
    private static final long serialVersionUID = 1L;

    private transient List<TaskData> tasks;
    private transient List<TaskData> selected_tasks;

    public void init() {
        tasks = new ArrayList<TaskData>();
        selected_tasks = new ArrayList<TaskData>();
        tasks = Task.getTasks("483");
    }    
    public Project_Questions(){
        init();
    }
    public void itemSelected2(AjaxBehaviorEvent event) {
        ExternalContext externalContext =
          FacesContext.getCurrentInstance().getExternalContext();
        String index = externalContext.getRequestParameterMap().get("task_id");
        TaskData e = tasks.get(0);
        selected_tasks.add(e);
    }
}
@ManagedBean(name=“Project\u Questions”)
@视域
公共类Project_问题实现可序列化{
@SuppressWarnings(“兼容性:-502509661122908883”)
私有静态最终长serialVersionUID=1L;
私有临时列表任务;
所选任务的私有临时列表;
公共void init(){
tasks=newarraylist();
所选任务=新建ArrayList();
tasks=Task.getTasks(“483”);
}    
公共项目(问题){
init();
}
已选择的公共无效项2(AjaxBehaviorEvent事件){
外部上下文外部上下文=
FacesContext.getCurrentInstance().getExternalContext();
String index=externalContext.getRequestParameterMap().get(“任务id”);
taskdatae=tasks.get(0);
所选任务。添加(e);
}
}
这是我的backingbean的简化版本,它只获取任务中的第一项,并将其放入所选的_项中。这在第一次使用时效果很好,但不会再使用


有人知道发生了什么事吗?我觉得我可能在JSF中做了一些根本错误的事情。提前谢谢。

我想你简化了
Bean.itemSelected1
?是的,它与itemSelected2完全相同。我还尝试将这两个表都放在一个表单中,每个表都有一个表单。所谓“视图从不呈现”,您的意思是这些表没有更新,或者根本没有HTML回复?另外,您使用的是绝对渲染ID。您是否尝试过将两个表放在同一个表单中,并使用了例如
render=“tbl1”
?如果我使用render=“@all”、render=“@this”或render=“@form”,这些表不会更改,但是如果我使用render=“:tbl1”,则该表会更改一次。当我将这两个表放在同一个表单中并使用render=“tbl1”时,我得到了一个异常:“FacesException:包含未知id“tbl1”-无法在组件j_idt64的上下文中找到它”是的,我的错误<代码>不能是渲染属性的目标。但是您的问题很可能通过-ie解决,请尝试