Hi,
i'm using <tc:sheet> with the attribute sortActionListener. The sheet
contains one static column (<tc:column>) and a dynamic number of
supplemental columns. The dynamic columns are added by the binding
attribute of the <tc:sheet>.
The problem is as followed:
The sortActionListener method is ONLY called by clicking on the
columnheader of the static column BUT NOT by clicking on the columnheader
of one of a dynamic column.
What could be the reason? Someone any suggestion? Or is it a bug?
---------------------------------------------
JSF-Code:
---------------------------------------------
<tc:sheet rows="10"
columns="20px;#{myForm.dynamicColumnsString}"
value="#{myForm.documents}"
var="doc"
selectable="multi"
id="documentsSheet"
showHeader="true"
showDirectLinks="center"
showPageRange="right"
showRowRange="left"
state="#{documentsSheetState}"
sortActionListener="#{myForm.doSortDocuments}"
stateChangeListener="#{myForm.doUpdatePreviewImages}"
binding="#{myForm.documentBinding}">
<tc:column id="index" align="right">
<tc:out value="#{doc.index}" />
</tc:column>
</tc:sheet>
---------------------------------------------
Java Code:
---------------------------------------------
public UIData getDocumentBinding() {
if (this.ivDocumentSheet == null) {
setDocumentBinding(new UIData());
}
if (ivAttributes != null) {
if (ivDocumentSheet.getChildCount() <= 1) {
String lvColumnLayout = "20px";
int lvCnt = 0;
for (Iterator i = ivAttributes.iterator(); i.hasNext();)
{
Attribute lvAttribute = (Attribute) i.next();
UIColumn lvColumn = new UIColumn();
lvColumn.setLabel(lvAttribute.getName());
lvColumn.setId("Column" + lvCnt);
UIOutput lvOut = (UIOutput)
FacesContext.getCurrentInstance().getApplication().createComponent(UIOutput.COMPONENT_TYPE);
lvOut.setRendererType("Out");
String lvBindingString = "#{doc.value" + lvCnt + "}";
ValueBinding lvBinding =
FacesContext.getCurrentInstance().getApplication().createValueBinding(lvBindingString);
lvOut.setValueBinding("value", lvBinding);
lvColumn.getChildren().add(lvOut);
lvColumn.setSortable(true);
lvColumn.setAlign("center");
ivDocumentSheet.getChildren().add(lvColumn);
lvColumnLayout += ";100px";
lvCnt++;
}
ivDokumentDetailsSheet.setColumns(lvColumnLayout);
}
}
return this.ivDocumentSheet;
}
public UIData getDocumentBinding() {
if (this.ivDocumentSheet == null) {
setDocumentBinding(new UIData());
}
if (ivAttributes != null) {
if (ivDocumentSheet.getChildCount() <= 1) {
String lvColumnLayout = "20px";
int lvCnt = 0;
for (Iterator i = ivAttributes.iterator(); i.hasNext();)
{
Attribute lvAttribute = (Attribute) i.next();
UIColumn lvColumn = new UIColumn();
lvColumn.setLabel(lvAttribute.getName());
lvColumn.setId("Column" + lvCnt);
UIOutput lvOut = (UIOutput)
FacesContext.getCurrentInstance().getApplication().createComponent(UIOutput.COMPONENT_TYPE);
lvOut.setRendererType("Out");
String lvBindingString = "#{doc.value" + lvCnt + "}";
ValueBinding lvBinding =
FacesContext.getCurrentInstance().getApplication().createValueBinding(lvBindingString);
lvOut.setValueBinding("value", lvBinding);
lvColumn.getChildren().add(lvOut);
lvColumn.setSortable(true);
lvColumn.setAlign("center");
ivDocumentSheet.getChildren().add(lvColumn);
lvColumnLayout += ";100px";
lvCnt++;
}
ivDokumentDetailsSheet.setColumns(lvColumnLayout);
}
}
return this.ivDocumentSheet;
}
public void setDocumentBinding(UIData pvTable)
{
this.ivDocumentSheet = pvTable;
if (ivDocumentSheet.getChildren().size() > 1)
{
int lvColumnSize = ivDocumentSheet.getChildCount();
for (int i = 1; i < lvColumnSize; i++) {
ivDocumentSheet.getChildren().remove(1);
}
ivDocumentSheet.setColumns("");
}
this.getDocumentBinding();
}
kind regards
Adam A. Henne