Java 表单提交给spring控制器时的NumberFormatException

Java 表单提交给spring控制器时的NumberFormatException,java,spring,forms,hibernate,submit,Java,Spring,Forms,Hibernate,Submit,在我当前的spring项目中,当我尝试提交此表单时: <form role="form" class="form" action="/Destaque/cadastra" method="post" enctype="multipart/form-data"> <field-box> <div> <div> <div> <label>Produto<

在我当前的spring项目中,当我尝试提交此表单时:

 <form role="form" class="form" action="/Destaque/cadastra" method="post" enctype="multipart/form-data">
<field-box>
  <div>
    <div>              
      <div>
        <label>Produto</label><select class="form-control" name="listaDeProdutos[]" multiple="multiple" rows="7"><option value="1">one</option><option value="2">two</option><option value="3">three</option><option value="4">four</option><option value="5">five</option><option value="6">six</option><option value="7">seven</option><option value="8">eight</option><option value="9">nine</option><option value="10">ten</option><option value="11">eleven</option><option value="12">twelve</option></select>
      </div>
    </div>
  </div>
</field-box>
<field-box>
        <label>Titulo</label><input type="text" class="form-control" name="titulo" />
</field-box>
<field-box>
        <label>Resumo</label><input type="text" class="form-control" name="resumo" />
</field-box>
<field-box>
        <label>Valor</label><input type="text" class="form-control valida" pattern="[0-9]{2}.[0-9]{2}" name="valor" />
</field-box>
<field-box>
        <label>Descrição</label><textarea class="summernote" name="descricao"></textarea>
</field-box>
<field-box>
        <label>Capa do destaque</label><input type="file" class="form-control" name="icone" />
</field-box>
<field-box>
        <label>Validade</label><input type="text" class="form-control valida" pattern="[0-9]{2}/[0-9]{2}/[0-9]{4}" name="validade" />
</field-box>
<field-box>
        <label>destaque ativo</label><input type="checkbox" name="ativo" />
</field-box>

<button type="submit" class="btn btn-default">Cadastrar</button>

<div id="yes" class="alert alert-success" role="alert" style="display: none;">
  <button type="button" class="close" data-hide="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
  <span class="text">Cadastro efetuado com sucesso</span>
</div>

<div id="not" class="alert alert-danger" role="alert" style="display: none;">
  <button type="button" class="close" data-hide="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
  <span class="text"></span>
</div>
有人能看出这里出了什么问题吗

注:提交采用以下方式处理:

控制器:

  @RequestMapping(value = "cadastra", method=RequestMethod.POST)
  @ResponseBody
  public void cadastra(@ModelAttribute("object") E object, BindingResult result, @RequestParam(value="icone", required=false) MultipartFile icone, @RequestParam(value="fotos", required=false) MultipartFile fotos[], @RequestParam(value="arquivo", required=false) MultipartFile arquivo[]) throws Exception {
    serv.cadastra(object);
    serv.upload(object, icone);
    serv.upload_multiplo(object, fotos);
    serv.upload_jar(object, arquivo);
  }
服务

  @PreAuthorize("hasPermission(#user, 'cadastra_'+#this.this.name)")
  @Transactional
  public void cadastra(E object) {
    dao.insert(object);
  }
dao类:

public void insert(E object) {
    EntityManager entityManager = getEntityManager();
    entityManager.getTransaction().begin();
    entityManager.persist(object);
    entityManager.getTransaction().commit();
    entityManager.close();
}
根据堆栈跟踪(
java.lang.NumberFormatException:对于输入字符串:“
”),似乎发生的情况是,当您提交表单时,表单的一个数字输入仍然为空,因此当您尝试将字符串输入转换为数字时,它会抛出错误


可以通过将表单的数字输入默认为一个数字(例如,零)来解决此问题,这样表单就不会以空数字输入提交。

我设法解决此问题,将此属性编辑器类添加到项目中:

@Component
public class ProdutoEditor extends PropertyEditorSupport {
  @Override
  public void setAsText(String text) {
    if (!text.equals("")) {
      ProdutoService serv = new ProdutoService();
      ApplicationContextHolder.getContext().getAutowireCapableBeanFactory().autowireBean(serv);
      Produto produto = serv.getObject(text);
      setValue(produto);
    } else {
      setValue(null);
    }
  }
}
使用此选择代码的选项:

<select class="form-control" name="listaDeProdutos" multiple="multiple" rows="7">
    ...
    <option value="1">one</option>
    ...
</select>

...
一
...

但我在提交前填写了表格的所有字段。可能应用程序缺少一些值?如果没有更多信息,很难说没有,但是纯粹基于堆栈跟踪,您将双精度值绑定到某个表单输入,错误是由于输入为空。如果表单中的所有数字输入从不为空(即“”),那么我可以想到的另一种可能性是,在读取该值后,将其清除为“”,然后双向绑定抛出错误,因为它尝试更新该值。
@Component
public class ProdutoEditor extends PropertyEditorSupport {
  @Override
  public void setAsText(String text) {
    if (!text.equals("")) {
      ProdutoService serv = new ProdutoService();
      ApplicationContextHolder.getContext().getAutowireCapableBeanFactory().autowireBean(serv);
      Produto produto = serv.getObject(text);
      setValue(produto);
    } else {
      setValue(null);
    }
  }
}
<select class="form-control" name="listaDeProdutos" multiple="multiple" rows="7">
    ...
    <option value="1">one</option>
    ...
</select>