Ajax只呈现一次或不会在jsf2中更新

时间:2013-11-27 17:15:07

标签: 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}" >
       <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函数,当我将render参数设置为“@ 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);
    }
}

这是我的支持bean的简化版本,它只获取任务中的第一项并将其放入selected_items。这是第一次完美无缺,但再也没有。

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

0 个答案:

没有答案