Play Framework - CRUD命名约定

Tha*_*ran 5 java playframework

CRUD模块无法在play框架中转换有意义的类名.例如,如果我有一个Category模型,然后在控制器文件夹中创建一个Categories类来扩展CRUD,则类别链接将不会出现在admin部分中.但是,如果我将文件重命名为"Categorys",它将起作用.这个小问题有什么解决方案吗?因为我曾经和CakePhp一起玩,所以它适用于所有名称约定

dwi*_*wi2 9

根据Play框架的CRUD模块的文档

控制器的类名必须是带有final's'的模型类名.

但是,您可以使用@ CRUD.For()批注来单独自定义CRUD控制器的命名:

package controllers;

import models.Category;

@CRUD.For(Category.class)
public class Categories extends CRUD {

}
Run Code Online (Sandbox Code Playgroud)

编辑:

在快速浏览CRUD模块的源代码之后,我认为模型命名解析位于{location of play} /modules/crud/app/controllers/CRUD.java(版本1.2.4)的第260行:

259             String name = controllerClass.getSimpleName().replace("$", "");
260             name = "models." + name.substring(0, name.length() - 1); 
Run Code Online (Sandbox Code Playgroud)

它只是通过查找没有控制器名称的最后一个字符的单词来查找模型名称.(我刚试过它,你甚至可以将你的CRUD控制器命名为'Categoryz'.它工作得很好)

所以,如果你真的想以"传统"方式解决这个问题,你可以修改CRUD.java的第260行,并利用一些库进行单数复数转换,如ModeShape中的Inflector.但在我看来,使用@ CRUD.For注释很好,更具成本效益.