【问题标题】:Automatically detaching choice renderer in wicket在检票口中自动分离选择渲染器
【发布时间】:2017-03-21 16:35:48
【问题描述】:

我经常发现自己在创建一个选项来为简单对象上的属性选择一个值,例如

public class Customer {
    private Integer customerSiteId;
}

public class CustomerSite {
    private Integer id;
}

我有一个实际对象的列表,例如CustomerSite 类,但我的选择是基于整数的,即选择是对应于站点 ID 的整数。

我想为此类用例实现IChoiceRenderer,它在内部创建一个单独的模型以提高效率

public class IdSelectionRenderer<T, S> implements IChoiceRenderer<T> {

    IModel<Map<T, S>> displayMap;

    public IdSelectionRenderer(IModel<Collection<S>> displays, Function<S, T> idObtainer) {

        displayMap = new LoadableDetachableModel<Map<T, S>>() {
            @Override
            protected Map<T, S> load() {
                return displays
                        .getObject()
                        .stream()
                        .collect(Collectors.toMap(idObtainer, Function.identity()));
            }
        };

    }

    @Override
    public Object getDisplayValue(T object) {
        return displayMap.getObject().get(object);
    }

    @Override
    public String getIdValue(T object, int index) {
        return object.toString();
    }

    @Override
    public T getObject(String id, IModel<? extends List<? extends T>> choices) {
        return Optional
                .ofNullable(choices.getObject())
                .get()
                .stream()
                .filter(choice -> choice.toString().equals(id))
                .findFirst()
                .orElse(null);
    }

}

有没有办法让检票口自动分离这些内部模型,同时将它们严格保留在渲染器中?

【问题讨论】:

  • 连接到组件的模型具有完整的生命周期,具有分离功能。如果未连接,则没有。我不确定你是否理解...
  • 在组件中,您可以通过覆盖 detach() 将任何内部模型挂钩到声明要分离的任何内部模型。我想知道是否可以将内部模型连接到选择渲染器上,以便以某种方式分离。行为有自己的detach(),所以我很好奇选择渲染器是否可能有类似的选项。

标签: java wicket


【解决方案1】:

不,Wicket 不会分离选择渲染器,因此无法挂钩您的模型。您必须“手动”完成。

【讨论】:

    【解决方案2】:

    仅作记录:Wicket 8 修复了此问题:https://issues.apache.org/jira/browse/WICKET-6347

    【讨论】:

    • 如果您可以从您共享的链接中添加更多详细信息,那就太好了...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    相关资源
    最近更新 更多