Ajax要么只呈现一次,要么不会在jsf2中更新
我有两个数据表,我想在这些表中前后移动行。 我使用AJAX将数据从一个列表移动到另一个列表。但是AJAX只渲染视图一次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
<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解决,请尝试