从禁用的输入中删除数据

Remove data from disabled input

我在 html 中禁用了一个字段并通过 ajax 向控制器发送了一个请求,该字段没有随请求一起提供,但它仍然存在于 bean 中。

我怎样才能设法从 bean 中自动删除它?

简单控制器

 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',但它保留最后一个值。

这是一种方法。禁用该字段时恢复原始值。原始值可以存储为输入字段本身或隐藏字段中的数据属性。

向您的输入元素添加数据属性以存储原始值:

<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"/>