diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java index 2cebb6c37d..24bf0f8d4e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java @@ -44,6 +44,13 @@ public class AdempiereIdGenerator implements IdGenerator { public String nextComponentUuid(Desktop desktop, Component comp, ComponentInfo compInfo) { String prefix = comp.getId(); + if (prefix == null || prefix.length() == 0) { + String attribute = comp.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME); + if (attribute != null && attribute.length() > 0) { + prefix = getWidgetName(comp.getWidgetClass())+"0"+attribute; + } + } + if (prefix == null || prefix.length() == 0) { prefix = DEFAULT_ZK_COMP_PREFIX; } @@ -54,8 +61,15 @@ public class AdempiereIdGenerator implements IdGenerator { //only include id space owner to ease converting test case to use zk id selector instead of uuid if (parent instanceof IdSpace) { String id = parent.getId(); - if (id != null && id.length() > 0) - builder.insert(0, id+"_"); + if (id != null && id.length() > 0) { + builder.insert(0, id+"_"); + } else { + String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME); + if (attribute != null && attribute.length() > 0) { + id = getWidgetName(parent.getWidgetClass())+"0"+attribute; + builder.insert(0, id+"_"); + } + } } parent = parent.getParent(); } @@ -85,6 +99,11 @@ public class AdempiereIdGenerator implements IdGenerator { return prefix + i; } + private String getWidgetName(String widgetClass) { + String name = widgetClass.substring(widgetClass.lastIndexOf(".")+1); + return name.toLowerCase(); + } + public static String escapeId(String prefix) { Pattern pattern = Pattern.compile("[^a-zA-Z_0-9]"); Matcher matcher = pattern.matcher(prefix); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java index 9b0490db1b..c14e5d38fb 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java @@ -22,6 +22,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; +import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.component.Bandbox; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Datebox; @@ -109,9 +110,10 @@ public abstract class WEditor implements EventListener, PropertyChangeLis this.setComponent(comp); this.gridField = gridField; - comp.setWidgetAttribute("columnName", gridField.getColumnName()); if (gridField.getGridTab() != null) { - comp.setWidgetAttribute("qualifiedColumnName", gridField.getGridTab().getTableName()+"."+gridField.getColumnName()); + comp.setWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME, gridField.getGridTab().getTableName()+"0"+gridField.getColumnName()); + } else { + comp.setWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME, gridField.getColumnName()); } this.setMandatory(gridField.isMandatory(false)); this.readOnly = gridField.isReadOnly(); diff --git a/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java b/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java index 0bfe84cf52..d580ca30bd 100644 --- a/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java +++ b/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java @@ -26,7 +26,7 @@ public class SelectTabTest extends AbstractTestCase { selectTab("$Product_1 $detailPane @tabbox", "Business Partner"); assertEquals("Business Partner", selectedTab("$Product_1 $detailPane @tabbox")); - WebElement element = driver.findElement(Zk.jq("$Product_1 $Product @textbox[columnName=\"Name\"]")); + WebElement element = driver.findElement(Zk.jq("$Product_1 $Product @textbox[instanceName=\"M_Product0Name\"]")); assertNotNull(element); } }