Jak warunkowo wyłączyć pole wprowadzania formularza

Powiedz, że mam obiekt Domain Teacher z dwoma polami String name, TeacherType teacherType, gdzie TeacherType jest enum zawierającym AssitantProfessor, AssociateProfessor, Professor.

Po wygenerowaniu widoków przy użyciu run-target generuj-wszystkich Nauczyciel, tworzy on _form.gsp, który jest używany zarówno do tworzenia, jak i edycji Nauczyciela. W widoku edycji chcę, aby tylko nazwa była edytowalna, ale typ Nauczyciela, aby był niemożliwy do modyfikacji po utworzeniu (jest to tylko przykład, wymagane jest, aby niektóre pola nie mogły być aktualizowane po utworzeniu). W widoku tworzenia zarówno typ Nauczyciela, jak i nazwa powinny być edytowalne.

Ponieważ zarówno create.gsp, jak i edit.gsp renderują szablon _form, jakie jest preferowane podejście?

Utwórz dwa oddzielne szablony, np. _FormCreate.gsp, _formEdit.gsp; LubPodaj mapę modelu w create.gsp i edit.gsp i użyj ich w _form.gsp, aby warunkowo renderować widok? na przykład

W create.gsp:

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

W edit.gsp

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

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

Podejście 2 działa, ale przypuszczam, że jeśli liczba instrukcji warunkowych wzrośnie, może być lepiej zastosować podejście 1 i podzielić formularze.

Czy jest inne podejście, którego nie znam?

questionAnswers(1)

yourAnswerToTheQuestion