XxxController_Roo_GvNIXDatatables.aj 未针对 Xxxcontroller.java 类中的更改进行更新。当向控制器类添加“update=false, delete=false”时,XxxController_Roo_Controller.aj 通过删除更新和删除方法进行更新,但是对于 XxxController_Roo_GvNIXDatatables.aj,情况并非如此。这反过来会导致错误,如下所述。 一个例子 作为一个例子,我有下面的 Spring roo 脚本
"project --topLevelPackage com.springsource.petclinic
jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
entity jpa --class ~.domain.Pet --sequenceName PET_SEQ
field string --fieldName name --notNull --sizeMin 1
field number --fieldName weight --type java.lang.Float --notNull --min 0
web mvc setup
web mvc all --package ~.web
web mvc jquery setup
web mvc jquery all
web mvc datatables setup
web mvc bootstrap setup
web mvc datatables add --type ~.web.PetController
在某些用例中,例如事务,您不希望用户更新或删除,因此我通过添加“update=false, delete=false”更改了 PetController.java 类。这么老:
@RequestMapping("/pets")
@Controller
@RooWebScaffold(path = "pets", formBackingObject = Pet.class)
@GvNIXWebJQuery
@GvNIXDatatables(ajax = true)
public class PetController {
}
新的:
@RequestMapping("/pets")
@Controller
@RooWebScaffold(path = "pets", formBackingObject = Pet.class, update=false, delete=false)
@GvNIXWebJQuery
@GvNIXDatatables(ajax = true)
public class PetController {
}
效果是在 PetController_Roo_Controller.aj 文件中删除了更新和删除方法。
public String PetController.update(@Valid Pet pet, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {
public String PetController.updateForm(@PathVariable("id") Long id, Model uiModel) {
public String PetController.delete(@PathVariable("id") Long id, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, Model uiModel) {
但是在PetController_Roo_GvNIXDatatables.aj 文件中,更新和删除方法没有被删除。这会导致错误:
- 未为 PetController 类型定义方法 update(Pet, BindingResult, Model, HttpServletRequest)
- 未为 PetController 类型定义方法 delete(Long, Integer, Integer, Model)
问题:
- 我的假设是否正确,两个 aspectJ 文件应该被同等对待?
- 有解决方法吗?我不想推入,因为在我看来他们不应该在那里。从 PetController_Roo_GvNIXDatatables.aj 中删除代码也无济于事,因为它们会在我下次自动启动 Roo shell 时插入,顺便说一句是正确的。