2.6.4、页面保存处理程序
pageUpdateHandler方法在保存Wiki页面时处理HTTP POST请求。 当更新现有页面(发出SQL更新查询)或保存新页面(发出SQL插入查询)时,会发生这种情况:
private void pageUpdateHandler(RoutingContext context) {
String id = context.request().getParam("id"); (1)
String title = context.request().getParam("title");
String markdown = context.request().getParam("markdown");
boolean newPage = "yes".equals(context.request().getParam("newPage")); (2)
dbClient.getConnection(car -> {
if (car.succeeded()) {
SQLConnection connection = car.result();
String sql = newPage ? SQL_CREATE_PAGE : SQL_SAVE_PAGE;
JsonArray params = new JsonArray(); (3)
if (newPage) {
params.add(title).add(markdown);
} else {
params.add(markdown).add(id);
}
connection.updateWithParams(sql, params, res -> { (4)
connection.close();
if (res.succeeded()) {
context.response().setStatusCode(303); (5)
context.response().putHeader("Location", "/wiki/" + title);
context.response().end();
} else {
context.fail(res.cause());
}
});
} else {
context.fail(car.cause());
}
});
}
- 通过HTTP POST请求发送的表单参数可从RoutingContext对象获得。请注意,如果在Router配置链中没有一个BodyHandler,这些值将会 不可用,并且表单提交的有效负载将需要从HTTP POST请求负载中手动解码 ;
- 我们依靠在page.ftl FreeMarker模板中呈现的表单隐藏字段来知道我们是更新现有页面还是保存新页面;
- 再次,使用JsonArray传递SQL语句中的参数;
- updateWithParams方法用于插入/更新/删除SQL语句;
- 成功后,我们只需重定向到已编辑的页面。