【问题标题】:Hiding a component in Wicket在 Wicket 中隐藏组件
【发布时间】:2011-10-26 20:41:13
【问题描述】:

我在<a/> 标记内有一个组件,该组件在单击时会打开一个弹出窗口。这是一个“添加到收藏夹”链接,适用于 KML 文件。我的 KML 文件有一个名为“favourite[boolean]”的字段。现在我想隐藏或显示我的“添加到收藏夹”链接。 KML 列表是用表格生成的:

public class CustomTracksAjaxDataTable<T> extends CustomAjaxDataTable<T> {
    public CustomTracksAjaxDataTable(String id, List<IColumn<T>> iColumns,
      ISortableDataProvider<T> tiSortableDataProvider, int rowsPerPage) {
        super(id, iColumns, tiSortableDataProvider, rowsPerPage);
    }

    protected void onEventHandler(AjaxRequestTarget ajaxRequestTarget,
      KMLFile file) {
        setKMLData(file); // it just update map, dont care about it
        add(new FavouriteStarIconState(file.isSaved()));
    }
}

我试图添加一个行为:

public class FavouriteStarIconState extends AbstractDefaultAjaxBehavior {
    private boolean isFavourite;

    public FavouriteStarIconState(boolean isFavourite) {
        super();
        this.isFavourite = isFavourite;
    }

    @Override
    protected void respond(AjaxRequestTarget target) {
        if (isFavourite) {
            target.appendJavascript("jQuery('.map_container_star').css(
              {'display' : 'none' });");
        } else {
            target.appendJavascript("jQuery('.map_container_star').css(
              {'display' : 'block' });");
        }
    }

    @Override
    public void renderHead(IHeaderResponse response) {
        response.renderOnLoadJavascript(getCallbackScript().toString());
    }
}

包含组件的 HTML 部分:

<div id="map_container">
    <a wicket:id="favourite_star" class="map_container_star"></a>
</div>

这行不通。我用component.setVisible(false) 得到了同样的结果。我怎样才能躲起来工作?

【问题讨论】:

  • 你看过ComponentisVisible()方法吗?您可以覆盖它,Wicket 会处理剩下的事情,您只需将组件添加到AjaxRequestTarget。这个解决方案有一些限制,但通常它是有效的。

标签: java wicket


【解决方案1】:

它发现我犯了一个可怕的错误并将 javascript 附加到错误的位置。 AJAX 请求未呈现。正确的类是由我的类 CustomTracksAjaxDataTable 扩展的 CustomAjaxDataTable。我只是添加

new AjaxEventBehavior( "onclick" ) 

并覆盖

protected void onEvent( AjaxRequestTarget ajaxRequestTarget )

现在效果很好

【讨论】:

    【解决方案2】:

    你可以使用这样的 CSS 类

      .hiddenClass
    {
        visibility:hidden;
    }
    

    然后使用 AttributeModifier 将类添加到元素中

    component.add(new AttributeModifier("class", "hiddenClass"));
    

    或者直接将样式添加到style属性

    component.add(new AttributeModifier("style", "visibility:hidden;"));
    

    【讨论】:

    • 我得到'构造函数 AttributeModifier(String, String) 未定义'。也许我使用的是不同版本的 Wicket。
    • 可能是,答案是4岁
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多