为什么Wicket会更改html元素的id?

时间:2010-01-16 14:15:01

标签: html wicket identifier

如果我写

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

甚至

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

然后渲染的HTML显示每当刷新页面时附加不同数字的id“form”,例如

   <form id="form7"....

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

5 个答案:

答案 0 :(得分:18)

我们在项目中广泛设置了标记ID,以便使用Selenium测试框架简化自动测试。它确实有效。

Component.setOutputMarkupId(true); // write id attribute of element to html
Component.setMarkupId("someid"); // id attribute of element is "someid"

答案 1 :(得分:7)

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

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

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:0)

自从我与Wicket合作已经有一段时间了,但我记得当wicket使用ajax元素时,它的id会自动生成(标记的id,而不是{{ 1}})。不使用时可以控制标记的id和ajax元素。在您的情况下,由于没有代码,我猜您必须更改表单中的任何wicket:idAjaxButton

答案 4 :(得分:0)

是的,您可以编写自定义JavaScript ...您只需要根据'Wicket方式'实现它。您可以使用自定义JavaScript来装饰组件,Ajax调用等,然后它们都可以很好地运行。