当用户将表单字段留空时,使用正确的参数重新呈现视图时出现问题

时间:2011-08-25 02:18:37

标签: grails groovy

我在noSelection <g:select>视图的Account字段的Load标记中使用create属性。当用户没有做出选择并单击“创建”按钮时,我希望所有表单字段的当前值都传递到我的save控制器中的Load闭包,然后重新调用create视图,并使用前面提到的当前值填充该视图。这不会发生在我的两个表单字段中,我不明白为什么。

以下是Load控制器调用的create /truckingmanagement/load/create视图的内容:

enter image description here

如果用户未在Account字段中进行选择,然后单击“创建”按钮,则显然无法创建负载。以下是Load控制器调用的create /truckingmanagement/load/save视图的结果:

enter image description here

所以我这里有两个问题,第一个问题是第二个视图中的Logged By字段没有填充第一个视图中选择的值。此外,下拉框完全为空,没有用户可供选择。第二个问题是Account字段下拉框完全为空,没有可供选择的帐户。

以下是<g:select> Logged By视图中AccountLoad字段使用的create代码。

Logged By字段:

<g:select name="loggedBy.id" from="${loggedByUsers}" optionKey="id"  value="${loadInstance?.loggedBy?.id}" />

Account字段:

<g:select id="account" name="account.id" from="${accountsWithCargoDestinations}" optionKey="id" noSelection="['':'-Select-']" />

以下是我create中的saveLoadController个关闭:

def create = {
    Role role1 = Role.findByAuthority("ROLE_ADMIN")
    Role role2 = Role.findByAuthority("ROLE_OFFICE_PROFESSIONAL")
    Role role3 = Role.findByAuthority("ROLE_DRIVER")   
    def loggedByUsers = UserRole.findAllByRoleInList([role1, role2, role3]).user

    def loadInstance = new Load()
    loadInstance.properties = params

    def accountsWithCargoDestinations = Account.findAllByUserInList(Address.findAll("from Address as addresses where addresses.cargoDestination=true").user)

    return [loadInstance:loadInstance, loggedByUsers:loggedByUsers, accountsWithCargoDestinations:accountsWithCargoDestinations]
}

def save = {
    def loadInstance = new Load(params)
    if (loadInstance.save(flush: true)) {
        flash.message = "${message(code: 'default.created.message', args: [message(code: 'load.label', default: 'Load'), loadInstance.id])}"
        redirect(action: "show", id: loadInstance.id)
    }
    else {
        System.out.println params //Trying to see if any values from the problem fields got lost.
        render(view: "create", model: [loadInstance: loadInstance])
    }
}

您会注意到我println关闭的else部分的save语句中打印出params。当我这样做时,我发现在第一个视图中的Logged By字段中选择的值确实从第一个视图一直传递到这一点,但是我不知道为什么它不显示Load create视图在下一行代码中呈现,或者至少为什么某些(即来自loggedByUsers控制器的truckingmanagement/load/create)在呈现视图时不会填充Logged By字段。任何帮助将不胜感激,并为冗长而感到遗憾。

1 个答案:

答案 0 :(得分:1)

回答您在评论回复中提出的问题。您可能希望在控制器中使用chain进行调查。如果模型中尚未存在新的loadInstance,则需要稍微重新创建一个create action。但是,这应该可以解决问题。