【问题标题】:grails, pass data from controller to generated _form.gsp viewgrails,将数据从控制器传递到生成的 _form.gsp 视图
【发布时间】:2015-05-07 14:02:25
【问题描述】:

我得到了一个域类(Booking),它带有一个用户属性(使用 SpringSecurityCore 插件)和相应的视图(_form、create、edit、index、show.gsp)。

普通用户不应该能够以正常方式设置用户:

<g:select id="user" name="user.id" from="${usermanagement.User.list()}" optionKey="id" required="" value="${dailyBookingInstance?.user?.id}" class="many-to-one"/>

有了这个,每个用户都可以从下拉菜单中的所有用户中进行选择。普通用户不应该这样做,它应该自动设置为当前登录的用户。

为此我在 BookingController 中创建了一个函数:

def currentUser() {

        User user = springSecurityService.getCurrentUser()
        log.error(user)
        [user: user]    
    }

日志记录有效,我在控制台中得到了正确的输出 - 但我不知道如何在我的 _form.gsp 中获取该用户。据我所知,user 应该在名为 currentUser.gsp 的视图中可用,但我需要他在 _form.gsp 中。

我的目标是通过

AdminUser之间产生分歧
<sec:ifAllGranted roles="ROLE_ADMIN">secure stuff here</sec:ifAllGranted>

并在那里设置用户下拉菜单的内容:

  • 管理员:from="${usermanagement.User.list()}
  • 普通用户:from="${user}(从 Controller 中的 currentUser() 返回)

有了这个(普通用户)我得到了错误:Cannot get id from null,这意味着用户在视图中不可用。

【问题讨论】:

    标签: grails view controller grails-orm


    【解决方案1】:

    _form.gsp 是一个模板,您将没有直接的控制器方法。您必须将值传递给一些真实的视图。

    默认在edit.gsp和create.gsp中调用_form.gsp模板。

    您应该能够像这样将当前用户返回到您的视图:

    def edit(Booking bookingInstance){
         ...
         User user = springSecurityService.getCurrentUser()
         respond bookingInstance, model:[user:user]
    }
    

    然后在你的 _form.gsp 中使用它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多