4

ここで、TeacherType は AssitantProfessor、AssitantProfessor、Professor を含む列挙型です。

grails run-target generate-all Teacher を使用してビューを生成すると、Teacher の作成と編集の両方に使用される _form.gsp が生成されます。編集ビューでは、名前のみを編集可能にしたいのですが、TeacherType は一度作成すると変更できなくなります (これは単なる例です。作成後に特定のフィールドを更新できないことが要件です)。作成ビューでは、TeacherType と名前の両方が編集可能である必要があります。

create.gsp と edit.gsp の両方が _form テンプレートをレンダリングするため、ここで推奨されるアプローチは何ですか?

  1. 2 つの個別のテンプレート、つまり _formCreate.gsp 、 _formEdit.gsp を作成します。または
  2. create.gsp と edit.gsp 内でモデル マップを渡し、それらを _form.gsp で使用してビューを条件付きでレンダリングしますか? 例えば

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>

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

アプローチ 2 は機能しますが、条件ステートメントの数が増える場合は、アプローチ 1 に従ってフォームを分割する方が良いかもしれません。

私が気付いていない別のアプローチはありますか?

4

1 に答える 1