这个ui代码的helper方法是什么样子的?

vlf7wbxs  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(437)

我想重构一些ui代码。
我有一个html表单(这里:用一个叫做wicket的javagui编写),在这里我放置了一些链接(锚定标记)。我想创建一个新的优雅的helper方法,而不是一遍又一遍地重复代码。

String type = "", id = ""; 
Form form, Service service;

form.add(new Widget("createLink", form) { // the same for read, update, delete
    private static final long serialVersionUID = 1L;
    @Override
    public void onSubmit() {
        try {
            service.create(type, id);  // the same for service.read / update / delete
            info("Specific message for create, read, update, delete");
        } catch (DataAccessException e) {
            error(ExceptionUtils.getRootCauseMessage(e));
        }
    }
});
form.add(new Widget("readLink", form) {
    // ... service.read(...); info("... read ...");
});
form.add(new Widget("updateLink", form) {
    // ... service.update(...); info("... update ...");
});

正如你已经猜到的,我想要像这样的东西

form.add(createLink(htmlId, form, type, id, message, ?));

我想避免为此创建一个额外的类。但是兰博达斯会没事的。
最好的方法是什么?这种模式叫什么?
谢谢。

lsmd5eda

lsmd5eda1#

为了 ? 你可以用 java.util.function.Consumer :

private void createLink(String htmlId, Form<?> form, String type, String id, String feedbackMessage, Runnable _onSubmit) {
    return new Widget(htmlId, form) {
      private static final long serialVersionUID = 1L;

      @Override
      public void onSubmit() {
        try {
          _onSubmit();
          info(feedbackMessage);
        } catch (DataAccessException e) {
          error(ExceptionUtils.getRootCauseMessage(e));
        }
      }
    }
}

用法:

form.add(createLink("createLink", form, type, id, createMessage, () -> {
  service.create(type, id);
}));
4ngedf3f

4ngedf3f2#

您还可以从wicketstuff中查看这个实用程序类,它与ajax链接的功能非常相似。

相关问题