Java 表单提交给spring控制器时的NumberFormatException
在我当前的spring项目中,当我尝试提交此表单时: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<
<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">×</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">×</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>