10

如果我写

<form wicket:id="form" id="form>

甚至

<form wicket:id="form>...

然后,每当刷新页面时,呈现的 HTML 都会显示附加有不同数字的 id 'form',例如

   <form id="form7"....

有没有办法禁用 Wicket 框架的这种行为?

4

5 回答 5

20

我们在项目中广泛手动设置标记 ID,以简化使用 Selenium 测试框架的自动测试。它绝对有效。

Component.setOutputMarkupId(true); // write id attribute of element to html
Component.setMarkupId("someid"); // id attribute of element is "someid"
于 2010-01-19T17:56:23.647 回答
7

在大多数情况下,这是您在使用 wicket 时想要的行为。动态 id 旨在防止在将 Ajax 行为添加到组件或添加到 ajax 响应以进行刷新时发生 id 冲突。对于这些情况中的任何一种,您确实需要客户端响应和服务器端状态共同参与。如果有外部 js 资源,您需要组件的 id 来进行 dom 查找,那么我建议添加一个自定义 wicket 组件行为,然后生成对传入生成的 id 的函数的 js 调用。

我意识到我将要描述的内容会引导你更多地进入 Wicket 的森林。但我对 Wicket 为您开箱即用的 ajaxy 内容感到非常满意。

于 2010-01-16T16:10:39.193 回答
4

这是 Wicket 设计功能。您可以使用类来链接样式和组件。

<form wicket:id="form" id="form>

您也可以尝试(我从未做过)setMarkupId。我不确定这是个好方法。

于 2010-01-16T18:08:57.037 回答
0

自从我使用 Wicket 已经有一段时间了,但我记得当 wicket 使用 ajax 元素时,它id的 s 是自动生成的(id标签的,而不是wicket:id)。您可以在不使用和 ajax 元素时控制标签的 id。在您的情况下,由于没有代码,我猜您将不得不更改任何表单AjaxButtonAjax*表单。

于 2010-01-16T15:48:53.230 回答
0

是的,您可以编写自定义 JavaScript……您只需要根据“Wicket 方式”来实现它。您可以使用自定义 JavaScript 装饰组件、Ajax 调用等,然后一切都很好。

于 2011-01-12T04:16:26.053 回答