利用 formField 标签实现表单域的选择性编辑?
李小翔
2014-07-08 09:20

内容列表

在 BroBPM 的流程表单中，通过流程定义中的可编辑字段和只读字段配置，以及表单中的 p:field 标签，可以实现环节只允许编辑部分字段的功能。
对于非流程的表单，对应的有标签 g:formField，通过该标签和 request 属性，可以实现同样的功能。
以下面的表单域 code 为例：
<g:formField bean=”${ bean} ” name=”code”>
   <g:textField name=”code” value=”${ bean.code} ” />
</g:formField>
在控制器或者标签前添加下面的代码（设置不同的 request 属性），create、edit 操作时，结果如下：
不可编辑：
request.setAttribute( bropen.framework.Constants.REQ_FORM_RO, true )
不可编辑，因为未显式设置code可编辑：
request.setAttribute( Constants.REQ_FORM_FIRLDS_ED, [””] )
不可编辑，因为显式设置code只读：
request.setAttribute( Constants.REQ_FORM_FIRLDS_RO, [”code”] )
可编辑，因为显式设置code可编辑：
request.setAttribute( Constants.REQ_FORM_FIRLDS_ED, [”code”] )
可编辑，因为未显式设置code只读：
request.setAttribute( Constants.REQ_FORM_FIRLDS_RO, [””] )
不可编辑，因为显式设置code只读，且只读设置优先级高：
request.setAttribute( Constants.REQ_FORM_FIRLDS_RO, [”code”] );
request.setAttribute( Constants.REQ_FORM_FIRLDS_ED, [”code”] );
通过上面的代码可以看出：
通过设置 bropen.framework.Constants.REQ_FORM_RO 属性，所有表单域都不可编辑
通过设置 bropen.framework.Constants.REQ_FORM_FIELDS_ED 属性，来设置允许编辑的字段，默认为所有
通过设置 bropen.framework.Constants.REQ_FORM_FIELDS_RO 属性，来设置只读字段
再举一个例子，角色 ROLE_FOO_BAR 可以编辑字段 foo、bar：
if ( sec.role(code: ”ROLE_FOO_BAR”) ) { 
    request.setAttribute( bropen.framework.Constants.REQ_FORM_FIRLDS_ED, [”foo”, ”bar”] )
} 
角色，角色 ROLE_FOO_BAR 可以编辑除 foo、bar 外的所有字段：
if ( sec.role(code: ”ROLE_FOO_BAR”) ) { 
    request.setAttribute( bropen.framework.Constants.REQ_FORM_FIRLDS_RO, [”foo”, ”bar”] )
}