不明白为什么当Action方法上存在@ActionKey的注解时,处理ActionKey时不拼接ControllerKey,我理解ActionKey是隶属于ControllerKey的,而不应该取代,应该和按照方法名处理的逻辑保持一致
状态更改为 已关闭
确实很多时候存在一些难以权衡的情况,感谢答疑,不纠结了
先举个比较典型的使用场景: ``` // 路由配置 me.add("/login", LoginController.class);
// LoginController 定义 public class LoginController extends Controller { public void index() { }
// 假如不使用ActionKey注解,就必须是 "/login/logout" 才能访问到
@ActionKey("/logout")
public void logout() {
}
}
如上例所示对于退出url通常我们更喜欢"/logout"而不是"/login/logout",而且我们也不想再创建一个LogoutController,此时ActionKey就派上用场了。jfinal 的路由规则:actionKey = controllerKey + methodName,上面是一个打破controllerKey 束缚的例子。下面是一个打破 methodName 束缚的例子:
public class NewsController extends Controller {
@ActionKey("/2001")
public void news_2001 () {
}
```
假定一个历史比较久远的网站,有很多新闻资源,希望用年份当路由来分类访问,但 methodName 因为 java 语言的限制不能使用纯数字,也不能使用某些字符如减号。
ActionKey 最本质的目标就是在少数特殊情况下可打破 controllerKey 与 methodName的限制。这个设计并不完美,就是如你所说与路由配置感觉上有点冲突,作者在做这个设计的时候何尝不是纠结了很久,jfinal 路由通过约定的方式解决了绝大部分问题,但这少数需求也需要顾及,ActionKey 仅建议在在极少特殊情况下使用。