【发布时间】:2011-01-29 00:40:07
【问题描述】:
我在使用 a4j:jsFunction 和 h:dataTable 内的 actionListener 时遇到问题,当我想使用 a4j:commandLink 对特定行调用操作时,它可以正常工作,但是当我想使用 a4j:jsFunction 调用操作时& actionListener 它总是在 dataTable 中的最后一个元素上调用 举个例子吧:
<a4j:form ajaxSubmit="true" reRender="mainForm" id="mainForm">
<a4j:region>
<t:saveState value="#{ts.list}" />
</a4j:region>
<h:dataTable value="#{ts.list}" var="el" binding="#{ts.bind}">
<h:column>#{el}</h:column>>
<h:column>
<a4j:commandLink actionListener="#{ts.rem}">
<h:outputText value="delete by CMDLink" />
</a4j:commandLink>
</h:column>
<h:column>
<a href="#" onclick="okClicked();">delete by okClicked</a>
<a4j:jsFunction name="okClicked"
actionListener="#{ts.rem}"
/>
</h:column>
</h:dataTable>
</a4j:form>
现在,bean 的代码:
package com.sth;
import java.util.ArrayList;
import java.util.List;
import javax.faces.component.UIData;
import javax.faces.event.ActionEvent;
public class Ts {
private List<String> list = new ArrayList<String>();
private UIData bind;
public Ts(){
list.add("element1");
list.add("element2");
list.add("element3");
list.add("element4");
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public void rem(ActionEvent ae) {
String toRem = (String) bind.getRowData();
System.out.println("Deleting " + toRem);
list.remove(toRem);
}
public UIData getBind() {
return bind;
}
public void setBind(UIData bind) {
this.bind = bind;
}
}
当我使用 a4j:commandLink 删除元素时,它按预期工作,但是当我使用 a4j:jsFunction 调用 actionListener 时,它会针对最后一个元素调用动作:( 有任何想法吗? 干杯
【问题讨论】:
-
有什么理由比
a4j:commandLink更喜欢a4j:jsFunction? -
我想用 jQuery 做“模态确认框”,所以 jQuery 对话框会从 jsFunction 触发 okClicked()
标签: javascript jsf datatable