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 c0638771bf..282a55aa4b 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
@@ -48,6 +48,45 @@ public class AdempiereIdGenerator implements IdGenerator {
public String nextComponentUuid(Desktop desktop, Component comp, ComponentInfo compInfo) {
buildLocatorAttribute(comp);
+ String uuid = comp.getId();
+ boolean useIdSpace = true;
+ if (Util.isEmpty(uuid)) {
+ useIdSpace = false;
+ String attribute = comp.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME);
+ if (!Util.isEmpty(attribute)) {
+ String widgetName = getWidgetName(comp.getWidgetClass());
+ uuid = widgetName+"0"+attribute;
+ }
+ }
+
+ if (Util.isEmpty(uuid)) {
+ uuid = getWidgetName(comp.getWidgetClass());
+ }
+
+ StringBuilder builder = new StringBuilder(uuid);
+ if (useIdSpace) {
+ Component parent = comp.getParent();
+ while (parent != null) {
+ if (parent instanceof IdSpace) {
+ builder.insert(0, "_");
+ builder.insert(0, parent.getUuid());
+ break;
+ } else {
+ parent = parent.getParent();
+ }
+ }
+ } else {
+ if (comp.getParent() != null) {
+ builder.insert(0, "_");
+ builder.insert(0, comp.getParent().getUuid());
+ }
+ }
+
+ uuid = escapeId(builder.toString());
+ if (desktop.getComponentByUuidIfAny(uuid) == null) { // look to avoid dups
+ return uuid;
+ }
+
String number;
if ((number = (String)desktop.getAttribute("Id_Num")) == null) {
number = "0";
@@ -56,7 +95,8 @@ public class AdempiereIdGenerator implements IdGenerator {
int i = Integer.parseInt(number);
i++;// Start from 1
desktop.setAttribute("Id_Num", String.valueOf(i));
- return "t_" + i;
+
+ return uuid + "_" + i;
}
private static String getWidgetName(String widgetClass) {
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/TabbedDesktop.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/TabbedDesktop.java
index 41f49a24ac..4a9c46cb29 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/TabbedDesktop.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/TabbedDesktop.java
@@ -345,7 +345,7 @@ public abstract class TabbedDesktop extends AbstractDesktop {
{
Tabpanel panel = (Tabpanel) child;
Component component = panel.getFirstChild();
- Object att = component.getAttribute(WINDOWNO_ATTRIBUTE);
+ Object att = component != null ? component.getAttribute(WINDOWNO_ATTRIBUTE) : null;
if (att != null && (att instanceof Integer))
{
if (windowNo == (Integer)att)
diff --git a/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml b/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml
index d5e7dd3ed9..3875a948dd 100644
--- a/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml
+++ b/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml
@@ -17,4 +17,9 @@
org.adempiere.webui.UiLifeCycleListener
+
+
+ org.zkoss.zk.ui.uuidRecycle.disabled
+ true
+