【问题标题】:Transition from a core framework从核心框架过渡
【发布时间】:2020-04-21 07:56:06
【问题描述】:

祝大家新年快乐。

我是一个依赖于 Apache Wicket 的项目的新手,如今该项目并不以拥有庞大的用户群而闻名。事实上,我们很难找到新的人,我们希望最终过渡到一个更新的框架。不幸的是,代码库太大而无法“简单地”重写整个该死的东西。

我想问的是: 有没有人有一个可行的策略来从像 Wicket 这样的框架过渡到更“现代”的 REST-Interface + JS-Webframework 方法?我认为应该可以使用 Wicket 必须为其自己的前端公开的现有 API,用于我们以后选择创建整个前端的任何 js 框架。

有什么想法吗?

【问题讨论】:

  • 我们也有同样的问题,目前还没有明确的策略。我知道使用 Wicket Rest 资源(来自 wicketstuff),我们可以使用合并纯 Javascript 组件,但在如何迁移应用程序之前我们没有明确的地图。我同意,现在 Wicket 似乎已经死了。
  • 这也不是 Wicket 的错——只是 JS 框架比它更优越。,

标签: javascript rest architecture frameworks wicket


【解决方案1】:

我已经将一些 Javascript 纯组件与 Wicket 集成 - 您需要弄清楚的主要事情是如何让它们说话 - 在 Wicket 中,您可以使用安装在您的应用程序中的 RestResource 来服务器 JSON 内容。

例如:

class LayoutToolRestResource() : AbstractRestResource<JacksonWebSerializer>(JacksonWebSerializer()) {
  @SpringBean
  internal lateinit var layoutObjectTreeSupplier: LayoutObjectTreeSupplier

  /**
   * Reads the tree nodes from the given data source.
   * Example: http://localhost:8080/layout-api/tree-nodes?dataSourceName=admuser1625
   */
  @MethodMapping("/tree-nodes")
  fun objectTreeNodes(@RequestParam(value = "dataSourceName") dataSourceName: String?): List<TreeNode> {
    requireNotNull(dataSourceName) { "You must select a source data-source" }
    return layoutObjectTreeSupplier.buildTreeNodeList(dataSourceName)
  }
}

这是 Kotlin 代码。图书馆是 Wicket Stuff - https://wicketstuff.org/

你在你的应用中挂载这个资源:

    mountResource(
        "/layout-api",
        new ResourceReference( "layout-api" )
        {
            @Override
            public IResource getResource()
            {
                return LoaderWebApplication.this.layoutApiResource;
            }
        }
    );

在 Javascript 应用程序中,参考资源获取所需的 JSON 数据:

function getData(dataSourceName) {
  var contextPathField = document.getElementsByName('contextPath')[0];
  var url = contextPathField.textContent + "/layout-api/tree-nodes?dataSourceName=" + dataSourceName;
  wijmo.httpRequest(url, {
      success: function (xhr) {
        var data = JSON.parse(xhr.responseText);
        wijmoTree.itemsSource = data;
      },
      error: function (xhr) {
        // do something here
        var errorData = JSON.parse(xhr.responseText);
        alert(errorData.errorMessage);
      }
    }
  );
}

通过这种方式,您可以将处理 JSON 数据的应用程序(大多数 Web 框架都这样做)与 Wicket 集成。您可以拥有使用这种方法的页面和使用“经典”方法的页面,或者在您的页面中使用更现代的组件来检索这样的数据。

希望这会有所帮助。

【讨论】: