如何有条件地禁用表单输入字段
问题描述:
说我有一个Domain对象Teacher具有两个字段String name,TeacherType teacherType,其中TeacherType是一个包含AssitantProfessor,AssociateProfessor,Professor的枚举。如何有条件地禁用表单输入字段
使用grails run-target generate-all Teacher生成视图后,它会生成一个_form.gsp,用于创建和编辑Teacher。在编辑视图中,我只希望名称是可编辑的,但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>
方法二的作品,但我想,如果数量条件语句增加它可能只是更好地遵循方法1和分裂表格。
是否有另一种我不知道的方法?
答
的<g:select>
(和许多其他<g:...>
表单字段标签)的disabled
属性可以是一个布尔值表达式:
<g:select name="teacherType" from="${TeacherType?.values()}"
keys="${TeacherType.values()*.name()}" required=""
value="${teacherInstance?.teacherType?.name()}"
disabled="${mode == 'edit'}"/>
如果表达式评估为真这将呈现为disabled="disabled"
,和作为不存在的一个disabled
属性(即该字段不会被禁用),如果表达式为false。您甚至可以在模型中使用布尔条目,例如渲染
model="[teacherInstance: teacherInstance, editing:true]"
模板(或editing:false
分别),然后说上<g:select>
disabled="${editing}"
。
很酷,我会试试看。它确实看起来更好,因为它消除了有条件的标签 –
vsnyc
2013-02-13 05:40:57