假设我有一个域对象 Teacher,它有两个字段 String 名称、TeacherType TeacherType,其中 TeacherType 是一个包含 AssitantProfessor、AssociateProfessor、Professor 的枚举。
在我使用 grails run-target generate-all Teacher 生成视图后,它会生成一个用于创建和编辑 Teacher 的 _form.gsp。在编辑视图中,我只希望名称是可编辑的,但 TeacherType 一旦创建就不可修改(这只是一个示例,要求某些字段在创建后不能更新)。在创建视图中,TeacherType 和 name 都应该是可编辑的。
由于 create.gsp 和 edit.gsp 都呈现 _form 模板,这里首选的方法是什么?
- 创建两个单独的模板,即 _formCreate.gsp 、 _formEdit.gsp;或者
- 在 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 并拆分表格可能会更好。
还有另一种我不知道的方法吗?