3.2K Star 8.8K Fork 3.6K

GVPJFinal / JFinal

 / 详情

关于ActionMapping中对ActionKey处理逻辑的疑问

已完成
创建于  
2015-06-19 15:44

不明白为什么当Action方法上存在@ActionKey的注解时,处理ActionKey时不拼接ControllerKey,我理解ActionKey是隶属于ControllerKey的,而不应该取代,应该和按照方法名处理的逻辑保持一致

评论 (3)

先举个比较典型的使用场景:

// 路由配置
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 仅建议在在极少特殊情况下使用。

确实很多时候存在一些难以权衡的情况,感谢答疑,不纠结了

状态更改为 已关闭

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
840 jfinal 1580661334
Java
1
https://gitee.com/jfinal/jfinal.git
git@gitee.com:jfinal/jfinal.git
jfinal
jfinal
JFinal

搜索帮助