2014-06-11 31 views
0

我反映瞭如何通過使用擴展類的JSP頁面使用ModelAndView中的getter調用方法或獲取屬性值。如何調用ModelAndView方法或在JSP頁面中獲取對它的引用?

例如:

我會擴展類的ModelAndView類視圖,並實現有一些方法來得到一些數據。

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); 
    } 

} 

什麼也不剩,只是讓我的字符串測試從View在JSP頁面中:

example.jsp

<body> 
    <h1>WELCOME</h1> 
    // how can i here call method getElement of object View. 
    ${this.getElement("test")} 
    ${getElement("test")} 
</body> 

我如何可以調用方法getElement();對象從WelcomeController返回的視圖

+0

我認爲在JSP中你不能訪問整個ModelAndView只是它的ModelMap的項目,所以你必須添加你的商店給它addObject(..) – cy3er

回答

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; 
    } 
} 

然後在您的視圖,你可以簡單地訪問從子jacent模型中的任何對象:

<body> 
    <h1>WELCOME</h1> 
    ${test} 
</body> 

如果你真的想用你的元素構造模仿春ModelMap,最簡單的方法是用v.addObject("element", store);將自己的地圖展示給Spring模型。然後在你的JSP中,你可以做:

<body> 
    <h1>WELCOME</h1> 
    // how can i here call method getElement of object View. 
    ${element["test"]} 
</body> 
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> 
相關問題