我有一个字段,我在html中禁用并通过ajax向控制器发送请求,该字段没有请求,但它仍然存在于bean中。
我如何设法从bean中自动删除它?
SimpleController
def update(ConfiguracaoSistema configuracaoSistemaInstance) {
if (configuracaoSistemaInstance == null) {
notFound()
return
}
if (configuracaoSistemaInstance.hasErrors()) {
respond configuracaoSistemaInstance.errors, view: 'index'
return
}
configuracaoSistemaInstance.save flush: true
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.updated.message', args: [message(code: 'configuracaoSistema.label', default: 'ConfiguracaoSistema'), ''])
redirect action: "index"
}
'*' { respond configuracaoSistemaInstance, [status: OK] }
}
}
在gsp中我有一个字段,我将用jquery
禁用<g:textField name="enderecoServicosCatix" class="form-control input catix" disabled="${show}" value="${configuracaoSistemaInstance?.enderecoServicosCatix}"/>
我通过JQuery将其设置为禁用
$('.catix').each(function(){
$(this).attr("disabled", true);
$(this).prop('disabled', true);
});
我向控制器发送请求,我希望保存的实例在我刚刚禁用的字段中获取'null',但它保留最后一个值。
答案 0 :(得分:1)
这是一种方法。禁用该字段时恢复原始值。原始值可以存储为输入字段本身的数据属性,也可以存储在隐藏字段中。
将数据属性添加到input元素以存储原始值:
<g:textField name="enderecoServicosCatix" class="form-control input catix" disabled="${show}" data-originalvalue="${configuracaoSistemaInstance?.enderecoServicosCatix}" value="${configuracaoSistemaInstance?.enderecoServicosCatix}"/>
然后在禁用时恢复原始值:
$('.catix').each(function(){
$(this).attr("disabled", true);
$(this).prop('disabled', true);
$(this).val($(this).attr('data-originalvalue'));
});
(我还没有测试过。)
另一种方法是创建一个新参数并将其传递给控制器,该参数将指示它在绑定从视图接收的数据时忽略所有“catix”输入。这个新参数将是一个隐藏字段,如下所示:
<g:hidden name="catix_disabled" value="false"/>