if (readableIdProcessor != null)
{
readableIdProcessor.processWidget(dataTable, elementName, attributes, metawidget);
}
ValueHolder valueHolderTable = (ValueHolder) dataTable;
String tableValueExpression = valueHolderTable.getValue();
// Special support for non-Lists
Class<?> clazz = WidgetBuilderUtils.getActualClassOrType(attributes, null);
if (!List.class.isAssignableFrom(clazz))
{
String asListValueExpression = "forgeview:asList(" + StaticFacesUtils.unwrapExpression(tableValueExpression)
+ ")";
valueHolderTable.setValue(StaticFacesUtils.wrapExpression(asListValueExpression));
((BaseStaticXmlWidget) dataTable).putAdditionalNamespaceURI("forgeview", "http://jboss.org/forge/view");
}
// Add row creation/deletion for OneToMany and ManyToMany
if (!TRUE.equals(attributes.get(N_TO_MANY)) || metawidget.isReadOnly())
{
return dataTable;
}
String componentType = WidgetBuilderUtils.getComponentType(attributes);
if (componentType == null)
{
return dataTable;
}
// Hack until https://issues.apache.org/jira/browse/MYFACES-3410 is resolved: move the Collection into a temporary
// variable
HtmlPanelGroup panelGroup = new HtmlPanelGroup();
FaceletsParam param = new FaceletsParam();
param.putAttribute("name", COLLECTION_VAR);
param.putAttribute("value", tableValueExpression);
panelGroup.getChildren().add(param);
// Special support for non-Lists
if (!List.class.isAssignableFrom(clazz))
{
valueHolderTable.setValue(StaticFacesUtils.wrapExpression("forgeview:asList(" + COLLECTION_VAR + ")"));
}
else
{
valueHolderTable.setValue(StaticFacesUtils.wrapExpression(COLLECTION_VAR));
}
panelGroup.getChildren().add(dataTable);
// If not bidirectional, create an 'Add' section (bidirectional does it 'in place')