我有一个具体的问题;
我是grails的新手我试图用这个场景编写一些测试应用程序;
我有2个域类
1-车 2-注册
我想添加一些品牌,型号等车。用户将从列表中选择一些车并点击租车按钮。当用户点击租车按钮将在这里打开注册/创建页面我想获得汽车:用户选择汽车的ID和用户将输入一些来自他自己的额外信息,如您的姓名和用户点击保存按钮时注册/列表我需要看到汽车注册:id和你的名字条目
在汽车类我有汽车列表,这个字段是我的汽车模型;
package rentme
class Car {
String brand
String model
String fuelType
BigDecimal pricePerDay
String busy
static constraints = {
brand(inList:["AUDI", "BMW", "MERCEDES", "NISSAN", "HONDA", "FORD"])
model()
fuelType(inList:["FUEL", "DIESEL", "AUTOGAS"])
pricePerDay(min:0.0, max:1000.0)
busy(inList:["YES", "NO"])
}
}
我有注册课程,
package rentme
class Registration {
String yourName
static constraints = {
yourName()
}
}
所以我做了什么,
我在g:each中添加cars / index.gsp这个链接;
<g:each in="${carList}" var="car">
<p>${car.id} </p>
<g:link action="create" controller="registration" params="${[car: car, carId : car.id ]}">
Rent Car
</g:link>
</g:each>
并修改了注册控制器;
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond Car.list(params), model:[carCount: Car.count()]
}
现在发生了什么;当我点击租借按钮页面重定向到注册/创建页面时,汽车用户选择了捕获ID;
这是我的注册/ create.gsp
<g:form action="save">
<div><p>Car ID : ${car.id} </p></div>
<fieldset class="form">
<f:all bean="registration"/>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:form>
当填写你的名字字段并点击保存按钮时,一切都很好,所以喜欢它工作但不是:)
因为当我检查我的数据库时,我没有看到选择的车辆ID。
mysql> SELECT * FROM registration;
+----+---------+--------------+
| id | version | your_name |
+----+---------+--------------+
| 12 | 0 | Cihan Zengin |
| 13 | 0 | Cihan |
| 14 | 0 | ndlkdkldnkl |
+----+---------+--------------+
但是当我点击注册/索引或注册/显示时,只有你的名字价值,但我想看到那里的车:也是。
怎么做?请有人告诉我,因为我无法理解,也无法在互联网上找到类似的东西
答案 0 :(得分:0)
让我们假设每次注册时,每辆车只有一辆车和一个人。
首先,对于注册类:
package rentme
class Registration {
String yourName
Car rentedCar
static constraints = {
yourName()
}
}
如您所见,我已将Car添加到内部,因此对于每个注册对象,都会有一个Car对象。在您的注册表数据库中,将自动添加新列“CAR_ID”。
接下来,对于cars / index.gsp每个:
<g:each in="${carList}" var="car">
<p>${car.id} </p>
<g:link action="create" controller="registration" params="${[carId : car.id ]}">
Rent Car
</g:link>
</g:each>
action="create"
和controller="registration"
表示create()
中的方法registrationController
将被调用,如果找到或未找到,则会显示registration / create.gsp。在registrationController中,我不确定你的索引方法是什么,但只需添加:
def create() {
def selectedCar = Car.get(params.carId)
[car: selectedCar]
}
def save() {
def selectedCar = Car.get(params.carId)
def registration = new Registration(
yourName: params.yourName,
car: selectedCar
).save()
}
然后,在registration / create.gsp:
中<g:form action="save">
<div><p>Car ID : ${car.id} </p></div>
<fieldset class="form">
<f:all bean="registration"/>
</fieldset>
<fieldset class="buttons">
<input type="hidden" name="carId" id="carId" value="${car?.id}"/>
<input type="text" name="yourName" required>
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:form>
create()方法从car / index.gsp获取carId的参数并使用它获取Car对象,并在registration / create.gsp中呈现
registration / create.gsp中的隐藏字段确保在提交表单时将car id传递给控制器。因此,当单击submitButton时,将调用Registration Controller中的save()方法,并保存带有检索到的Car Object的Registration对象。
我们在这里做了很多不好的做法,但它应该有效。如果这还不清楚,请告诉我。)