如何在JSP页面中调用ModelAndView方法或获取它的引用?

时间:2014-06-11 09:08:53

标签: java jsp spring-mvc

我反思如何使用扩展类通过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返回

2 个答案:

答案 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>