我希望在抽象类中使用一个公共方法注释@ModelAttribute但是从子类中获取值。最终目标是在JSP中检索变量的值。每个子类控制器的值都不同,但我不想复制@ModelAttribute方法。
抽象类
public abstract class BaseController {
protected String PATH = "";
public void setPATH(String inPath) {
PATH = inPath;
}
@PostConstruct
private void init() {
setPATH(PATH);
}
@ModelAttribute("controllerPath")
public String getControllerPath() {
return PATH;
}
}
子类,控制器
@Controller
@RequestMapping(OneController.PATH)
public class OneController extends BaseController {
protected static final String PATH = "/one";
public OneController() {
setPATH(PATH);
}
}
JSP
Value for controllerPath: ${controllerPath}
使用Spring版本4.0.9.RELEASE,$ {controllerPath}的值始终为空,但使用Spring版本3.1.2.RELEASE工作(该值使用子类控制器中的值设置)。 如何更新我的代码以使用Spring 4?
答案 0 :(得分:1)
您需要在抽象控制器中声明ModelAttribute方法的抽象。
public abstract class BaseController {
protected String PATH = "";
public void setPATH(String inPath) {
PATH = inPath;
}
@PostConstruct
private void init() {
setPATH(PATH);
}
@ModelAttribute("controllerPath")
public abstract String getControllerPath();
}
在扩展抽象控制器的每个控制器上:
@Controller
@RequestMapping(OneController.PATH)
public class OneController extends BaseController {
protected static final String PATH = "/one";
@Override
public String getControllerPath(){
return PATH;
}
}
<强>更新强>
如果您不想在所有控制器中重复新方法:
在你的抽象控制器中
@ModelAttribute("controllerPath")
public String getControllerPath(){
return "";
}
您要覆盖该值的位置。添加覆盖注释
@Override
public String getControllerPath(){
return PATH;
}