【问题标题】:Atribute for annotations @ModelAtribute and @PreAutorize in Generic Controller / Service classes通用控制器/服务类中的注解属性 @ModelAtribute 和 @PreAutorize
【发布时间】:2014-05-26 13:42:58
【问题描述】:

我正在尝试为我的项目设置一个通用类。到目前为止,我得到了这段代码:

https://github.com/klebermo/blog.cms/blob/master/src/main/java/com/config/generic/controller/GenericController.java

此刻,我被这个方法卡住了:

@RequestMapping(value="cadastra", method=RequestMethod.POST)
@ResponseBody
public String cadastra(@ModelAttribute("") E object, BindingResult result) {
    if(service.cadastra(object))
        return "yes";
    else
        return "not";
}

注解ModelAtribute的参数应该是我项目中的一个实体类的名称,我已经存储在类成员entity_class中,但是因为注解只接受常量值,所以不能使用。

此外,注释 PreAutorize 也有同样的问题。我会这样使用这个注解:

@PreAuthorize("hasPermission(#user, '<<permission_name>>')")
@RequestMapping(value="cadastra")
public ModelAndView cadastra() {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("privado/"+this.entity_name+"/cadastra");
    return mav;
}

在我的通用服务方法中也是如此。权限名称遵循以下规则:

<<action_name>>_<<entity_name>>

对于每个实体类,我将拥有三个权限:cadastra (new_item)、altera (change_item) 和 remove (remove_item)。

谁能指出如何解决这个问题?

【问题讨论】:

    标签: java spring generics annotations


    【解决方案1】:

    对于第一个问题@ModelAttribute,据我了解,您有几个表单调用相同的映射方法地籍来验证信息是否正确。 我想你可以用一个表单参数来告诉它是哪个实体类,并使用 wrapper 来包装所有调用该方法的实体。

    创建一个实体:

    @Entity
    public class Wrapper{
    private Entity1 e1;
    .....
    

    在你的jsp中:

    <form:form modelAttribute="wrapper" .../>
    <form:hidden value="classname" .../>
    <form:input path=e1.someProperty .../>
    

    在你的控制器中:

    @RequestParam("classname") String classname;//used to get which entity it's
    service.cadastra(wrapper.getEntityX())
    

    对于第二个问题,我对@PreAuthorize 注释了解不多。

    【讨论】:

    • 其实我有几种形式,每一种都调用特定控制器的方法cadastra,每一种都是从这个类派生的。所以,是的,所有人都调用了这个方法,但是每个人都已经用正确的实体名称调用了它。我希望能够将此名称与 ModelAtribute(和 PreAuthorize)一起使用。我创建一个名为“Wrapper”的类的问题是,如果我创建另一个实体,可能会在数据库中创建一个新的不需要的表。
    • sry,它不必是实体,就像具有私有属性和 Getter&Setter 的域类一样。 @ModelAttribute 中的值必须是常量,这意味着即使它是一个变量,它也必须是最终静态的。嗯,我也对这个问题感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多