У меня проблема с использованием a4j:jsFunction с actionListener внутри h:dataTable, когда я хочу вызвать действие над определенной строкой с помощью 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>
теперь код компонента:
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:jsFunctionвышеa4j:commandLinkв любом случае? - person BalusC   schedule 18.03.2010