1

私は足場テンプレートをリファクタリングしていますが、この問題で壁にぶつかりました:

テンプレート _FORM.GSP からサービス (いくつかのセキュリティ ロジック) を呼び出そうとしましたが、出力部分ではなくコード部分で

私はここで提案されたことを読んで試しました: How do I call a Grails service from a gsp?

  1. taglib を使用しようとしましたが、grails に関する私の知識が十分でない可能性があります。
  2. import と def を _FORM.GSP ファイルの先頭に追加しようとしました (サービスの grailsApplication とアプリケーションのインスタンス化の両方が、欠落しているプロパティ アプリケーションまたは欠落しているプロパティ grailsApplication でクラッシュしていました)。
  3. コードから taglib をメソッド isAllowedToEdit として直接呼び出すことも、g.isAllowedToEdit として呼び出すことも試みましたが、どちらも未知のメソッド resp でクラッシュします。「そのようなプロパティはありません g」

テンプレート _form.gsp には、標準の gsp ビューとは異なるルールがあるようです

私はこのようなことをしたい:

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 を割り当てる方法があれば - あなたの提案を試してみます

4

2 に答える 2

0

これを試しましたか?

    <%@ page import="com.myproject.MyService" %>
<%
    def myService = grailsApplication.classLoader.loadClass('com.myproject.MyService').newInstance()
%>

これは確実に機能します。

このリンクにアクセスしてください:ここをクリックしてください

于 2013-06-17T06:27:33.890 に答える