波总,请问5.0版的自动路由问题

你好,波总,最近有一个项目在向jfinal上迁移,但之前的项目是类似spring mvc这种路由结构,url路由可以是class和method级别的,但现在jfinal的path只能设置到class级别,如果要使用method级别只能使用actionKey来强制指定路由,这也像是一种解决办法。

但有一个问题是,不太美观,而且class级别的路由不能共用,比如说像这样

@Path("album/category")
public class AlbumCategoryController extends BaseController {

    @Inject
    private AlbumCategoryService albumCategorySrv;

    public void index() {
        render("index");
    }

    @Before(WebContextInterceptor.class)
    public void list() {
        setAttr(MyConstants.PAGE, albumCategorySrv.pageParent());
        render("list");
    }

   @ActionKey("/album/category/parent/add")
    public void addParent() {
        Boolean flag = albumCategorySrv.saveParent(getModel(AlbumCategory.class));
        renderJson(flag, "添加");
    }
    
    @ActionKey("/album/category/parent/edit/dialog")
    public void editParentDialog() {
        setAttr("CAT", albumCategorySrv.get(getInt("id")));
        render("dialog/parent/edit");
    }
    
    @ActionKey("/album/category/edit")
    public void editParent() {
        AlbumCategory category = albumCategorySrv.get(getInt("id"));
        if (Objects.isNull(category)) {
            jsonFail("非法参数");
            return;
        }
        Boolean flag = albumCategorySrv.update(getModel(AlbumCategory.class));
        renderJson(flag, "编辑");
    }


这们会有很多重复的字符串,没有办法实现继承class级别的路由, 我现在想实现的是在method上只用写"child/add/dialog"这样就可以再加个class上的viewPath,自动组装成

"/album/category/child/add/dialog"

看了下源码,这些都是在actionHandler里面完成的,自定义一个actioinHandler是否可以解决这个问题呢?或者是有没有计划在新版本里面添加这个功能


ps. 好像找到解决方案了,自定义一个扩展

private Function<Routes, ActionMapping> actionMappingFunc = null;


评论区

Leo.du

2022-08-28 09:20

也许有些地方还没理解透,还请多多见谅

杜福忠

2022-08-28 11:35

@Leo.du https://jfinal.com/share/2594

Leo.du

2022-08-28 11:43

@杜福忠 谢谢,这个很好

热门反馈

扫码入社