[jboss-user] [JBoss Seam] - @DataModelSelection always set to first item in ListDataMode

stu2 do-not-reply at jboss.com
Fri Mar 9 23:08:25 EST 2007

First, 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.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4026828#4026828

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4026828

More information about the jboss-user mailing list