Grails 如何有条件地禁用表单输入字段

Grails 如何有条件地禁用表单输入字段,grails,grails-2.0,Grails,Grails 2.0,假设我有一个域对象教师,它有两个字段字符串名TeacherType TeacherType,其中TeacherType是一个枚举,其中包含AssistantProfessor、AssociateProfessor、Professor 在我使用grails run target generate all Teacher生成视图之后,它会生成一个_form.gsp,用于创建和编辑教师。在编辑视图中,我只希望名称可以编辑,但TeacherType在创建后不可修改(这只是一个示例,要求某些字段在创建后不

假设我有一个域对象教师,它有两个字段字符串名TeacherType TeacherType,其中TeacherType是一个枚举,其中包含AssistantProfessor、AssociateProfessor、Professor

在我使用grails run target generate all Teacher生成视图之后,它会生成一个_form.gsp,用于创建和编辑教师。在编辑视图中,我只希望名称可以编辑,但TeacherType在创建后不可修改(这只是一个示例,要求某些字段在创建后不能更新)。在“创建”视图中,TeacherType和name都应该是可编辑的

既然create.gsp和edit.gsp都呈现了表单模板,那么这里的首选方法是什么

  • 创建两个单独的模板,即_formCreate.gsp、_formEdit.gsp;或
  • 在create.gsp和edit.gsp中传入模型映射,并在_form.gsp中使用它们有条件地渲染视图? e、 g
  • 在create.gsp中:

        <fieldset class="form">
            <g:render template="form" model="[teacherInstance: teacherInstance, 'mode':'create']"/>
        </fieldset>
    
    
    
    在edit.gsp中

        <fieldset class="form">
            <g:render template="form" model="[teacherInstance: teacherInstance, 'mode':'edit']"/>
        </fieldset>
    
    
    
    以普惠制形式

        <g:if test="${mode == 'edit'}">
            <g:select name="teacherType" from="${TeacherType?.values()}" keys="${TeacherType.values()*.name()}" required="" value="${teacherInstance?.teacherType?.name()}" disabled="disabled"/>
        </g:if>
        <g:else>
            <g:select name="teacherType" from="${TeacherType?.values()}" keys="${TeacherType.values()*.name()}" required="" value="${teacherInstance?.teacherType?.name()}" disabled="false"/>
        </g:else>
    
    
    
    方法2是有效的,但我认为如果条件语句的数量增加,那么遵循方法1并拆分表单可能会更好


    还有其他我不知道的方法吗?

    禁用的
    属性(以及许多其他
    表单字段标记)可以是布尔值表达式:

    <g:select name="teacherType" from="${TeacherType?.values()}"
      keys="${TeacherType.values()*.name()}" required=""
      value="${teacherInstance?.teacherType?.name()}"
      disabled="${mode == 'edit'}"/>
    

    (或
    编辑:分别为false
    ),然后在
    上说
    禁用=“${editing}”
    ,我会试试这个。它看起来确实是一种更好的方法,因为它消除了条件标记
    model="[teacherInstance: teacherInstance, editing:true]"