只需创建共享逻辑的静态方法并使用它为两个操作构建Result,它将自动包含request(),最简单的示例:
public class A extends Controller {
public Result create(String param) {
return shared("A role", param);
}
public static Result shared(String role, String param) {
String msg = "Path: " + request().path();
msg += ", role is: `" + role + "`";
msg += (param == null)
? " and has no param"
: ", with param: " + param;
return ok(msg);
}
}
public class B extends Controller {
public Result create() {
return controllers.A.shared("B role", null);
}
}
关于参数
请注意,实际上您需要在A.create(...) 和B.create(...) 中解析的唯一参数是路由部分(String param 在A 路由中)或者可能是一些可选参数硬编码在每个喜欢role 的例子中。
其他内容,如request、session、cache、数据库数据等,可以(应该)在shared()方法中提取。
提示:如果传递给shared() 方法所需的参数数量很大,并且您不想像
那样创建
monsters
controllers.A.shared(null, null, null, null, null, null, null, null, "foo");
只需创建Map<String, Object> 集合并一次性全部传递,或者创建专用瞬态模型,将所有值保存在适当的字段中。当将许多值传递给常见的 Twirl 模板时,第二个选项也是我最喜欢的。