我正在尝试为我的项目设置泛型类。到目前为止,我得到了这段代码:
在这一刻,我坚持这种方法:
@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)。
任何人都可以指出如何解决这个问题的方向?
答案 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注释了解不多。