我反思如何使用扩展类通过JSP页面在ModelAndView中使用getter调用方法或获取属性值。
例如:
我会将类ModelAndView扩展到类View并实现一些获取某些数据的方法。
import org.springframework.web.servlet.ModelAndView;
public class View extends ModelAndView {
private Map store = new HashMap<>() ;
public Object getElement(String index) {
return store.get(index);
}
public void setElement(String index,Object o) {
store.put(index,o);
}
}
现在将处理接近请求的控制器。
public class WelcomeController extends AbstractController {
private String viewName;
@Override
protected ModelAndView handleRequestInternal(
HttpServletRequest request,
HttpServletResponse response) throws Exception {
View v = new View("example.jsp");
v.setElement("test", "Hello im test!");
return v
// I would not use here method addObject();
// how put reference to jsp page of View (ModelAndView)
// code like this return StackOverflowError
// v.addObject("reference_to_view",v);
}
}
除了从JSP页面中的View获取字符串测试外,没有任何内容:
example.jsp
<body>
<h1>WELCOME</h1>
// how can i here call method getElement of object View.
${this.getElement("test")}
${getElement("test")}
</body>
我如何调用方法getElement();对象View从WelcomeController返回
答案 0 :(得分:0)
从JSP中调用方法并不容易。这就是Spring ModelAndView
的原因:您提供了一个视图的引用,并使用可以从视图轻松访问的属性填充模型。
public class WelcomeController extends AbstractController {
private String viewName;
@Override
protected ModelAndView handleRequestInternal(
HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("example.jsp");
mav.addObject("test", "Hello im test");
return mav;
}
}
然后在您的视图中,您可以简单地访问子相邻模型中的任何对象:
<body>
<h1>WELCOME</h1>
${test}
</body>
如果您真的想要使用您的元素构造来模仿Spring ModelMap
,最简单的方法是使用v.addObject("element", store);
将您自己的地图公开给Spring模型。然后在JSP中,你可以这样做:
<body>
<h1>WELCOME</h1>
// how can i here call method getElement of object View.
${element["test"]}
</body>
答案 1 :(得分:0)
也许我错了,但你不能定义你的控制器:
@ManagedBean(name = WelcomeController.CONTROLLER_NAME)
public class WelcomeController extends AbstractController {
public static final String CONTROLLER_NAME = "welcomeController";
..
public String calculateSomeValue() {
return "Hello";
}
}
并在jsf页面中使用它:
<body>
<h1>WELCOME</h1>
${welcomeController.calculateSomeValue()}
</body>