这是可以做到的。诀窍是让您的控制器操作遵守一组严格的规则。tldr 是为了确保它们返回无效。
好的:
def void save() {
坏的:
def save() {
原因可以在 Griffon 框架用来创建其行动目标列表的反思分析中找到。这个列表是在 中生成的DefaultGriffonControllerClass.getActionNames()
,它要求:
行动须遵守以下规则才能被视为:
- 必须具有公共 (Java) 或默认 (Groovy) 可见性修饰符。
- name 与事件处理程序不匹配,即它不以 on 开头。
{code GriffonClassUtils.isPlainMethod()}
如果它是一种方法,则必须通过。
- 如果它是一种方法,则必须将 void 作为返回类型。
- 如果它是一个属性,则 value 必须是一个闭包(包括 curried 方法指针)。
中定义的标准GriffonClassUtils.isPlainMethod()
如下:
isInstanceMethod(method)
! isBasicMethod(method)
! isGroovyInjectedMethod(method)
! isThreadingMethod(method)
! isArtifactMethod(method)
! isMvcMethod(method)
! isServiceMethod(method)
! isEventPublisherMethod(method)
! isObservableMethod(method)
! isResourceHandlerMethod(method)
! isGetterMethod(method)
! isSetterMethod(method)
! isContributionMethod(method)
动作目标名称列表随后由以下人员使用AbstractActionManager
:
@Nullable
private static Method findActionAsMethod(@Nonnull GriffonController controller, @Nonnull String actionName) {
for (Method method : controller.getClass().getMethods()) {
if (actionName.equals(method.getName()) &&
isPublic(method.getModifiers()) &&
!isStatic(method.getModifiers()) &&
method.getReturnType() == Void.TYPE) {
return method;
}
}
return null;
}