grails - 如何有条件地禁用表单输入字段

标签 grails grails-2.0

假设我有一个域对象教师,它有两个字段字符串名称,教师类型教师类型,其中教师类型是包含助理教授、助理教授、教授的枚举。

在我使用 grails run-target generate-all Teacher 生成 View 后,它会生成一个 _form.gsp,用于创建和编辑教师。在编辑 View 中,我只希望名称可编辑,但教师类型一旦创建就不可修改(这只是一个示例,要求某些字段在创建后不能更新)。在创建 View 中,TeacherType 和 name 都应该是可编辑的。

由于 create.gsp 和 edit.gsp 都呈现 _form 模板,这里的首选方法是什么?

  • 创建两个单独的模板,即 _formCreate.gsp , _formEdit.gsp;或
  • 在 create.gsp 和 edit.gsp 中传入模型映射并在 _form.gsp 中使用它们来有条件地呈现 View ?
    例如

  • 在 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 并拆分表单可能会更好。

    还有另一种我不知道的方法吗?

    最佳答案

    disabled <g:select> 的属性(以及许多其他 <g:...> 表单字段标签)可以是 bool 值表达式:

    <g:select name="teacherType" from="${TeacherType?.values()}"
      keys="${TeacherType.values()*.name()}" required=""
      value="${teacherInstance?.teacherType?.name()}"
      disabled="${mode == 'edit'}"/>
    

    这将呈现为 disabled="disabled"如果表达式的计算结果为真,并且没有 disabled属性(即该字段不会被禁用)如果表达式为假。您甚至可以在模型中使用 bool 条目,例如渲染模板
    model="[teacherInstance: teacherInstance, editing:true]"
    

    (或分别为 editing:false)然后说 disabled="${editing}"<g:select> .

    关于grails - 如何有条件地禁用表单输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841302/

    相关文章:

    在 grails 中 hibernate NonUniqueObjectException

    eclipse - 我是否需要将 .groovy 和 .settings 文件夹提交到存储库

    在 Grails 中缓存?

    grails - 使用JQuery UI的Grails中的日期选择器:找不到资源错误

    rest - REST API和普通API之间有什么区别?

    javascript - Grails:是否可以从 taglib 调用 Assets 管道以包含 javascript 依赖项?

    mysql - Grails - 启动内存/内存使用/域对象

    grails - Grails删除 child

    javascript - 如何使用remoteFunction将JavaScript变量传递给Grails Controller

    grails - Controller 返回 404 错误,即使它返回结果