我尝试根据我之前在会话中添加的内容调用不同的操作方法。为此,我在Play's tutorial中推荐使用Global中的onRequest方法。我使用Java反射来构造一个具有相同名称和参数但在不同类B中的新方法.B类和原始类与原始actionMethod实现相同的接口。所以不应该是一个问题。
我在全球的onRequest看起来像:
@Override
public Action onRequest(Request request, final Method actionMethod) {
if (checkSomething) {
return super.onRequest(request, getNewActionMethod(actionMethod));
}
return super.onRequest(request, actionMethod);
}
private Method getNewActionMethod(Method oldActionMethod) {
String name = oldActionMethod.getName();
Class<?>[] parameterTypes = oldActionMethod.getParameterTypes();
Method newActionMethod = null;
try {
newActionMethod = B.class.getMethod(name, parameterTypes);
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newActionMethod;
}
这里的问题是Play只是忽略了我的新动作方法,并坚持要求旧动作方法。我错过了什么吗?
我正在使用Play framework 2.2.3。