gpt4 book ai didi

templates - GRAILS:我可以从 _FORM.GSP 模板调用服务逻辑吗?

转载 作者:行者123 更新时间:2023-12-02 14:44:35 24 4
gpt4 key购买 nike

我正在重构脚手架模板,但遇到了这个问题:

我试图从模板 _FORM.GSP 调用服务(一些安全逻辑) - 但在代码部分,而不是在输出部分

我已经阅读并尝试了这里的建议:How do I call a Grails service from a gsp?

  • 我尝试过使用 taglib,但我对 grails 的了解可能不够全面
  • 我尝试将 import 和 def 添加到 _FORM.GSP 文件的开头(grailsApplication 和服务的应用程序实例化都在缺少属性应用程序和缺少属性 grailsApplication 时崩溃)
  • 我什至尝试从代码中直接调用 taglib 作为方法 isAllowedToEdit 和 g.isAllowedToEdit 都在未知方法上崩溃。 “没有这样的属性 g”

  • 似乎模板 _form.gsp 与标准 gsp View 有不同的规则

    我想做这样的事情:
    private renderFieldForProperty(p, owningClass, prefix = "") {
    boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate')
    boolean display = true
    boolean required = false
    if (hasHibernate) {
    cp = owningClass.constrainedProperties[p.name]
    display = (cp ? cp.display : true)
    required = (cp ? !(cp.propertyType in [boolean, Boolean]) && !cp.nullable && (cp.propertyType != String || !cp.blank) : false)
    }

    /* trying to do this part */
    // I want to assign value to cp.editable - so later I can render read-only fields in renderEdit
    if (!mySecurityService.canEdit(springSecurityService.currentUser, owningClass.getClass(), actionName, p.name)) {
    cp.editable = false
    }
    /* trying to do this part */

    if (display) { %>
    <div class="fieldcontain \${hasErrors(bean: ${propertyName}, field: '${prefix}${p.name}', 'error')} ${required ? 'required' : ''}">
    <label for="${prefix}${p.name}">
    <g:message code="${domainClass.propertyName}.${prefix}${p.name}.label" default="${p.naturalName}" />
    <% if (required) { %><span class="required-indicator">*</span><% } %>
    </label>
    ${renderEditor(p)}
    </div>
    <% } } %>

    如果有任何方法可以分配 cp.editable - 我会尝试你的建议

    最佳答案

    it seems that template _form.gsp has different rules than standard gsp view



    生成的 _form.gsp 与其他 gsps 的工作方式相同,但模板位于 scr/templates/scaffolding/ 中。是不同的。像您正在做的自定义模板有点棘手。请记住,您正在编写的逻辑是针对 Grails 如何生成 View (gsp)。这意味着您告诉 Grails 在内存或文件中生成 View 之前检查一些逻辑。对于运行时的动态(内存中)脚手架,您可能能够在某种程度上实现这一点,但对于静态脚手架肯定不行。那是因为 Grails
    不知道 currentUser生成模板时。

    如果您生成 View 然后自定义它们而不是修改它们的模板,您的问题会简单得多。然后您可以注入(inject)您的服务并进行其他检查。但是,正如您还提到的,这些逻辑在标签库中更好 here。 .

    此外,由于您提到了安全性,因此呈现不可编辑的字段并不能保证无法编辑您的字段。我建议将检查逻辑放在您的 Controller 中,例如在 SAVE 或 UPDATE 操作中,以防止任何未经授权的用户编辑字段。

    关于templates - GRAILS:我可以从 _FORM.GSP 模板调用服务逻辑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141220/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com