Cómo deshabilitar condicionalmente un campo de entrada de formulario

Digamos que tengo un objeto Dominio Profesor con dos campos Nombre de cadena, TeacherType teacherType, donde TeacherType es una enumeración que contiene AssitantProfessor, AssociateProfessor, Professor.

Después de que genere las vistas usando Grails run-target genera-all Teacher, produce una _form.gsp que se usa tanto para crear como para editar Teacher. En la vista de edición quiero que solo se pueda editar el nombre, pero el TeacherType no se puede modificar una vez creado (esto es solo un ejemplo, es un requisito que ciertos campos no se pueden actualizar después de la creación). En la vista de creación, tanto el TeacherType como el nombre deben ser editables.

Dado que tanto create.gsp como edit.gsp representan la plantilla _form, ¿cuál es el enfoque preferido aquí?

Cree dos plantillas separadas, es decir, _formCreate.gsp, _formEdit.gsp; O¿Pasar un mapa modelo dentro de create.gsp y edit.gsp y usarlos en _form.gsp para representar condicionalmente la vista? p.ej.

En create.gsp:

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

En edit.gsp

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

En _form.gsp

    <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>

El Enfoque 2 funciona, pero supongo que si el número de sentencias condicionales aumenta, puede ser mejor seguir el Enfoque 1 y dividir los formularios.

¿Hay otro enfoque que no conozco?

Respuestas a la pregunta(1)

Su respuesta a la pregunta