祝大家新年快乐。
我是一个依赖于Apache Wicket的项目的新手,如今,该项目并不以拥有庞大的用户群而闻名。实际上,这使我们很难找到新的人,并且我们最终希望过渡到新的框架。不幸的是,代码库太大了,无法“简单地”重写整个该死的东西。
我想问的是以下内容:有没有人有可行的策略从Wicket这样的框架过渡到更“现代”的REST-Interface + JS-Webframework方法?我认为应该有可能使用Wicket必须为自己的前端公开的现有API,以用于以后我们要选择的所有js框架来创建整个前端。
有什么想法吗?
您必须重写它。
我首先将所有业务逻辑从UI逻辑中重写/分离出来,然后将其转换为REST服务。
然后重写所有模型以从REST获取数据。
然后在您喜欢的JS框架中重写UI。您也可以让Wicket提供JS服务,因此您的过渡可以是迭代的。
[我已经将一些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集成。您可以拥有使用这种方法的页面和使用“经典”方法的页面,或者在页面中使用更现代的组件来像这样检索数据。
希望这会有所帮助。