我正在与Grails建立预订/预订系统。
我有预订舱和客户舱。有一个(客户)到多个(预订)关系。我想确保只在客户展示视图中进行新的预订,因此我编辑了视图,使其成为您创建新预订的唯一位置。
这样做,创建预订表单也适用于客户和产品的下拉选择器。我可以这样预订,但我必须选择客户 - 我希望客户字段自动填充客户名称,点击新的预订按钮。
目前在我的_form.gsp(由预订create.gsp使用)中,我有以下行给出了上述选择功能
<g:select id="customer" name="customer.id" from="${net.kanootours.Customer.list()}" optionKey="id" required="" value="${reservationInstance?.customer?.id}" class="many-to-one"/>
我认为部分:value =“$ {reservationInstance?.customer?.id}”会将字段设置为当前客户的值,但不会(该字段只填充第一个客户名称)。
如何在客户字段中填写我正在调用新预订的客户记录的名称?如果不是g:select?
,在这种情况下使用的正确标签是什么?对于最终结果,我只想在新预订中使用客户名称,而不需要将该名称更改为其他名称。
我曾尝试使用g:field和g:fieldValue,但无法使这些工作正常工作。
我还考虑过将客户ID作为调用g:link的参数发送的可能性 - 但我不知道如何处理它。
更新/解决方案:
下面的Greggs评论帮助我找到了解决方案,还有“GRAILS 2:快速入门指南”,Chpater“论坛消息和UI技巧”一书。
为了实现这一点,我添加了以下内容:
在预订_form.gsp:
<g:hiddenField name="customer.id" value="${customerInstance?.customer?.id}" />
<g:hiddenField name="customer.firstName" value="${customerInstance?.customer?.firstName}" />
<g:hiddenField name="customer.lastName" value="${customerInstance?.customer?.lastName}" />
N.B - I did not need all three - just the ID , but I used this for a better display title on the Reservation Create page.
我将客户显示页面(新预订链接)中的链接更改为:
<li><g:link controller="reservation" class="create" action="create"
params='["customer.id":"${customerInstance?.id}","customer.firstName":"${customerInstance?.firstName}","customer.lastName":"${customerInstance?.lastName}"]'>New Reservation</g:link></li>
这是我遇到最多麻烦的部分,因为customer.id部分在我尝试将其放入params的每种格式中都抛出了大量错误。这是本书帮助我的地方,它指出它需要被“”包围,因为它有''。在参议院。一旦我发现了这一点,我就可以解决任何其他问题
我还添加了预订创建视图:
<h1><g:message code="default.create.label" args="[entityName]" /> for ${reservationInstance?.customer?.firstName} ${reservationInstance?.customer?.lastName} ID: ${reservationInstance?.customer?.id}</h1>
我用它作为测试来确保正确传递的参数。然后,我可以确保将customer.id字段正确地发送到控制器中的create操作。
为了实现我使用
<g:field type="text" name="customer.id"value="${reservationInstance?.customer?.id}" readonly="readonly"/>
答案 0 :(得分:0)
我在这里做了一些猜测,因为我没有完全关注你的问题。因此,我的假设是您已进入客户屏幕,并且您想要单击新预订按钮并让客户已与所述预约相关联。如果这是真的,那么以下内容应该让你朝着正确的方向前进。
在客户表格上:
<g:link controller="reservation" action="create" params="[customer.id: customer.id]">Create Reservation</g:link>
这个RegistrationController
def create() {
// params.customer.id will auto populate in this reservation instance
def reservation = new Reservation(params)
...
}
报名表:
<g:hiddenField name="customer.id" value="${reservation.customer.id" />
Customer Name: ${reservation.customer.name}
在上面的代码中,Customer将在Reservation对象中可用。然后,您将customer.id
存储为隐藏字段,这样当您将此预留提交到RegistrationController.save()
操作时,它将再次使用正确的客户ID自动填充预订。如果您需要在预订中存储有关客户的不同内容,则适用相同的技术。您只需要不断传递所有请求。