@DataModelSelection always set to first item in ListDataMode
stu2 Mar 9, 2007 11:08 PMFirst, this is Seam 1.2Patch1 on Jboss 4.0.5.
In a nutshell, when I have a h:commandLink in a dataTable backed with a List, now matter which row's "clickable link" I select, the value in the variable annotated as @DataModelSelection is always the first element in the list.
In my SFSB I have the following defined:
@DataModelSelection(value="mappedColumns") protected FeedMappingColumn columnToDelete; @DataModel public List<FeedMappingColumn> getMappedColumns() { List<FeedMappingColumn> columns = new ArrayList<FeedMappingColumn>(); columns.addAll(mappedColumns.values()); return columns; }
basically translating a map into a list for display purposes.
The xhtml is as follows:
<rich:dataTable id="mappedColumns" value="#{feedMapping.mappedColumns}" var="column"> <h:column> <f:facet name="header"> <h:outputText value="Column Number" /> </f:facet> #{column.rawColumn.columnNumber} </h:column> <h:column> <h:commandLink value="del" action="#{feedMapping.removeMapping}"/> </h:column> </rich:dataTable>
and #{feedMapping.removeMapping} looks like this:
public void removeMapping() { int columnNumber = columnToDelete.getRawColumn().getColumnNumber(); info("Deleting column #0. columnToDelete instance is #1", columnNumber, columnToDelete); FeedMappingColumn column = mappedColumns.remove(columnNumber); // make sure it's already mapped. If not this is a programming error assert column != null : "Column [" + columnNumber + "] isn't mapped. Shouldn't be presented with unmap option"; assert column.getMappingCdmField() != null : "Column [" + columnNumber + "] is a mapped column but doesn't have a CdmField"; // add the cdmField back to the list of available ones remainingCdmFields.put(column.getMappingCdmField().getCdmField(),column.getMappingCdmField()); column.setMappingCdmField(null); unMappedColumns.put(columnNumber, column); }
I've been over the logic many times this afternoon, and I don't think it's a logic error. And I just stepped through Seam's DataModelSelector class, and it's getSelection() method in the debugger. After I click on for instance the last row in the list, I see that the selected value is indeed whatever happens to be the first item in the list.
Any ideas? I suspect it's a bug in the DataModel stuff, but want to get feedback before submitting something in Jira.