2011-04-08 137 views
13

我正在嘗試使用Spring MVC帶註釋的控制器的示例項目。到目前爲止,我在網上找到的所有示例都將JSP綁定到特定模型,並且控制器使用@ModelAttribute來檢查處理程序方法中的模型對象。在Spring MVC中將參數從JSP傳遞到控制器

我該如何着手將JSP中的其他參數(不存在於Model對象中)傳遞給Controller?我是否使用JavaScript來做到這一點?也有人可以澄清什麼HttpServletRequest對象應該用於。

謝謝。

回答

30

只需從jsp輸入標記中刪除「路徑」並使用HttpServletRequest來檢索剩餘的數據即可。

比如我有一個像

public class SomeData { 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

然後,豆在jsp中我將有更多的數據字段,在正常的HTML標籤

<form:form method="post" action="somepage" commandName="somedata"> 
    <table> 
    <tr> 
     <td>name</td> 
     <td><form:input path="name" /></td> 
    </tr> 
    <tr> 
     <td>age</td> 
     <!--Notice, this is normal html tag, will not be bound to an object --> 
     <td><input name="age" type="text"/></td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <input type="submit" value="send"/> 
     </td> 
    </tr> 
</table> 
</form:form> 

通知被髮送時,somedata豆有名字字段的年齡不是。所以年齡字段沒有「路徑」添加。沒有path屬性,對象屬性不會被綁定到這個字段。

上控制器I將不得不使用HttpServletRequest的像,

@RequestMapping("/somepage") 
public String someAction(@ModelAttribute("somedata") SomeData data, Map<String, Object> map, 
           HttpServletRequest request) { 

     System.out.println("Name=" + data.getName() + " age=" + request.getParameter("age")); 

     /* do some process and send back the data */ 
     map.put("somedata", data); 
     map.put("age", request.getParameter("age")); 

     return "somepage"; 
    } 

,同時訪問在視圖中的數據,

<table> 
    <tr> 
     <td>name</td> 
     <td>${somedata.name}</td> 
    </tr> 
    <tr> 
     <td>age</td> 
     <td>${age}</td> 
    </tr> 
</table> 

somedata是其提供的名稱屬性和年齡是bean由控制器明確設置屬性。

+0

感謝名單在這個例子中它解決了我的問題 – Azuu 2013-02-02 09:27:42

1

如果不想創建另一個類(bean),但它應該在那裏,那麼除了@ModelAttrbute之外,還可以使用@RequestParam

public String someAction(@RequestParam("somedata") String data) 
{ 
------ 
} 
+1

你也可以離開了@RequestParam註解如果請求參數的名稱對應方法參數名 – 2013-05-14 05:25:12

相關問題