一般动作
登录
Wiki: BROPEN ▼: Document Index
»
Space: FAQ ▼: Document Index
»
Page: 表单上通过代码直接给字段赋值，流程提交后没有保存
搜索
zh
页面动作
导出 ▼: 以PDF格式导出 以RTF格式导出 以HTML格式导出
更多动作 ▼: 打印预览 察看源码
欢迎进入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上被李小翔创建

- 评论 （0）
- 附件 （0）
- 记录
- 信息

# 快速链接

- 首页
- 新闻动态
- FAQ

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