通用控制器/服务类中的注释@ModelAtribute和@PreAutorize的属性

时间:2014-05-26 13:42:58

标签: java spring generics annotations

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

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)。

任何人都可以指出如何解决这个问题的方向?

1 个答案:

答案 0 :(得分:0)

对于第一个问题@ModelAttribute,我已经理解了,你有几个表单调用相同的Mapping方法cadastra来验证信息是否正确。 我认为您可以使用表单参数来告诉它是哪个实体类,并使用包装器来包装调用此方法的所有实体。

创建实体:

@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注释了解不多。