如何找出组件路径

时间:2012-11-26 12:45:46

标签: wicket

我使用junit断言wicket组件的存在:

wicketTester.assertComponent("dev1WicketId:dev2WicketId:formWicketId", Form.class);

这适用于某些形式。对于复杂的结构,通过搜索所有html文件找出表单的路径是很困难的。有没有什么方法可以轻松找到路径?

3 个答案:

答案 0 :(得分:9)

如果您有该组件,则可以致电#getPageRelativePath()。 E.g。

// Supposing c is a component that has been added to the page.
// Returns the full path to the component relative to the page, e.g., "path:to:label"
String pathToComponent = c.getPageRelativePath();

您可以使用visitChildren()方法获取标记容器的子级。以下示例显示如何从页面获取所有Form

List<Form> list = new ArrayList<Form<?>>();
Page page = wicketTester.getLastRenderedPage();
for (Form form : page.visitChildren(Form.class)) {
    list.add(form);
}

答案 1 :(得分:7)

获取这些内容的简便方法是在初始化应用程序时调用getDebugSettings().setOutputComponentPath(true);。这将使Wicket将这些路径输出到生成的HTML,作为每个组件绑定标记的属性。

建议仅在调试模式下启用此功能,但是:

public class WicketApplication extends WebApplication {
    @Override
    public void init() {
        super.init();

        if (getConfigurationType() == RuntimeConfigurationType.DEVELOPMENT) {
            getDebugSettings().setOutputComponentPath(true);
        }
    }
}

答案 2 :(得分:0)

扩展RJo的答案。

似乎不推荐使用方法page.visitChildren(<Class>)(Wicket 6),所以使用IVisitor可以是:

protected String findPathComponentOnLastRenderedPage(final String idComponent) {
    final Page page = wicketTester.getLastRenderedPage();
    return page.visitChildren(Component.class, new IVisitor<Component, String>() {
        @Override
        public void component(final Component component, final IVisit<String> visit) {
            if (component.getId().equals(idComponent)) {
                visit.stop(component.getPageRelativePath());
            }
        }
    });
}