我有两个数据表,我想在这些表中来回移动行。 我正在使用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或其他类似的事情上做了一些根本性的错误。提前谢谢。