欢迎进入Wiki » FAQ » 表单上通过代码直接给字段赋值,流程提交后没有保存?

表单上通过代码直接给字段赋值,流程提交后没有保存?

在2014-06-11 19:11上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

如下面直接给表单字段赋值的示例(或者是通过 js 代码直接修改 foobar 的值):

<g:textField name="foobar" value="${bean.foobar ?: 123}" />

此时,如果表单加载完后,用户不再手动修改其他表单字段,直接点击流程提交按钮,则流程提交出去后发现 foobar 的值还是空,而不是表单上初始化并显示的123。

原因是流程表单提交的时候,会检查表单是否有变化,如果没有变化则直接提交流程,否则先执行保存操作。而判断表单是否变化,是通过用户操作表单字段后、自动给对应的HTML元素设置一个 changed 的 css 类来实现的。

而上面的例子中,虽然修改了表单字段的值,但是没有触发HTML元素的 onchange 事件、没有设置 changed 的 css 类,因而流程提交时也就认为表单没有变化,从而不会执行保存操作、数据库中 foobar 属性的值也就始终为空了。

因此,解决方案就是给这个字段加一个 css 类,如:

<g:textField name="foobar" value="${bean.foobar ?: 123}" class="changed" />

但是,加上 changed 类后,流程保存、提交的时候,浏览器会提示“是否离开该页面...”云云。因此正确的代码应该是:

<g:textField name="foobar" value="${bean.foobar ?: 123}" class="${bean.foobar != 123 ? 'changed' : ''}" />

即值改变了的时候才设置 changed 类。

标签: BroBPM
在2014-06-11 19:11上被李小翔创建

Copyright © 2013 北京博瑞开源软件有限公司
京ICP备12048974号