我正在使用自定义ID生成器the one listed here in the article
它工作正常,但是我为我的标签生成了动态ID:
<tabpanels children="@load(vm.myTabsList) @template('myTemplate')" >
<template name="myTemplate" var="each">
<tabpanel id="tabPanel${each.key}">
<include src="zul/myTabZul.zul/>
</tabpanel>
</template>
</tabpanels>
我遇到了这个例外:
org.zkoss.zk.ui.UiException: Illegal character, }, not allowed in uuid,
抛出错误的方法并没有留下很多空间......不确定如何绕过它。
public static void checkUuid(String uuid) {
int j;
if (uuid == null || (j = uuid.length()) == 0)
throw new UiException("uuid cannot be null or empty");
while (--j >= 0) {
final char cc = uuid.charAt(j);
if ((cc < 'a' || cc > 'z') && (cc < 'A' || cc > 'Z')
&& (cc < '0' || cc > '9') && cc != '_')
throw new UiException("Illegal character, "+cc+", not allowed in uuid, "+uuid);
}
}
虽然原始生成器看起来很好,但它可能不会同时生成Id。
如果有人在使用selenium和ZK,请感谢您的意见。
答案 0 :(得分:1)
我认为它与Selenium无关。
决赛&#39;}&#39;被视为您的ID字符串的一部分,因为&#39; tabPanel $ {each.key}&#39;不是有效的EL表达式。看看here如何编写有效的EL表达式。 我建议你使用核心的cat方法连接这两个部分(tabPanel和$ {each.key})。您的代码将成为:
<!-- at the beginning of your file -->
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>
...
<tabpanel id="${c:cat('tabPanel',each.key)}">
&#39; each.key&#39;由于周围的$ {。}(它不必直接接触),将被正确解释。
我希望现在还为时不晚,而且还有帮助。
答案 1 :(得分:0)
我认为这是因为您尝试使用动态ID,但它并不接受它。
tabPanel${each.key}
包含&#39;}&#39;谈到(并标记他们从右到左检查,这是我们遇到的第一个)
随着更多的zul,我可以建议你如何改变它。