2010-03-15 103 views
3

我創建了一個GSP頁面,其中的控件取決於數據庫中的行。
這取決於<g:each in="${Vehicles}" var="vehicle"> 返回的值因此,如果有3輛車,則會生成3行帶文本框。 (最大可200)將數據從GSP傳遞到Grails中的控制器中

<g:form action="update" > 
     <label for="SearchTerm">${term}</label> 

      <g:each in="${Vehicles}" var="vehicle"> 
      <tr> 
        <td> <label for="Name">${vehicle.name}</label> </td> 
        <td><g:textField name="${vehicle.id}.ModelNo" /> </td> 
        <td><g:textField name="${vehicle.id}.Year" /> </td> 
      </tr> 
      </g:each> 
    <td> <g:submitButton name="update" value="Update"/></td> 
    </g:form> 

我怎麼能基本上這個值傳遞給我的控制器,這樣我就可以保存/更新的數據到數據庫中。還是有任何簡單的方法來實現這種情況?

回答

6

你需要像這樣的代碼在GSP

<g:form action="update" > 
      <label for="SearchTerm">${term}</label> 

       <g:each in="${Vehicles}" var="vehicle" status="i"> 
       <tr> 
         <td> <label for="Name">${vehicle.name}</label> </td> 
         <td><g:hiddenField name="vehicle[${i}].id" value="${vehicle.id}"/> 
<g:textField name="vehicle[${i}].ModelNo" value="${vehicle.ModelNo}"/> </td> 
         <td><g:textField name="vehicle[${i}].Year" value="${vehicle.Year}"/> </td> 
       </tr> 
       </g:each> 
     <td> <g:submitButton name="update" value="Update"/></td> 
    </g:form> 

控制器需要要麼有與列表屬性域或與列表屬性命令對象即

SearchCommand { 
    List<Vehicle> vehicle = new Arraylist<Vehicle>(3); 
} 
在控制器

然後(如果使用命令對象)

def save = {SearchCommand searchCmd-> 
    searchCmd.vehicle.each {vehicle -> 
    /* Process Vehicle */ 
    } 
} 

希望有所幫助

+0

除了隱藏的表單字段,您還可以使用什麼? – 2011-10-03 15:26:44

+0

除非您要在控制器中查找原始物品(車輛)購買ID,否則可能不需要HiddenField。 – 2011-10-05 02:51:42

2

您需要使用控制器中的請求對象。如果你可以生成你需要訪問的控件的名稱做類似下面

idList.each { 
theYear=request.getParameter(it+Year) 
} 

東西,如果你希望自己的所有生成的表單字段列表上使用類似

java.util.Enumeration theFields=request.getParameterNames() 
theFields.each { 
//look at your field name and take appropriate action 
} 

欲瞭解更多信息請求對象看this

相關問題