- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个表单,它在数据表中显示了几个对象列表。通过此表单,管理员用户可以定义特定用户对这些对象的权限。
例如,这是产品权限数据表jsp代码:
<sf:form action="${action}" class="form-horizontal" method="post" modelAttribute="permisosList" enctype="multipart/form-data" >
...
<table class="table table-striped table-bordered table-hover" id="tabla_permisos6">
<thead>
<tr>
<th><%=Languages.getString("Producto")%></th>
<th><%=Languages.getString("Permiso")%></th>
</tr>
</thead>
<tbody>
<c:forEach items="${permisosList.permisosProducto}" var="permiso" varStatus="counter">
<tr>
<sf:input path="permisosProducto[${counter.index}].producto.idProd" type="hidden"/>
<td style="vertical-align:middle;"><c:out value="${permiso.producto.nombre}"/></td>
<td align="center">
<sf:select class="form-control" path="permisosProducto[${counter.index}].permiso" type="number">
<sf:option value="0">
<c:out value="No visible" />
</sf:option>
<sf:option value="1">
<c:out value="Visible" />
</sf:option>
<sf:option value="2">
<c:out value="Descarga" />
</sf:option>
</sf:select>
</td>
</tr>
</c:forEach>
</tbody>
</table>
...
其中一些列表内部有成百上千个对象,因此提交表单时,我得到了 spring BindException:
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 4 errors
Field error in object 'permisosList' on field 'permisosProducto[137].producto.idProd': rejected value []; codes [typeMismatch.permisosList.permisosProducto[137].producto.idProd,typeMismatch.permisosList.permisosProducto.producto.idProd,typeMismatch.permisosProducto[137].producto.idProd,typeMismatch.permisosProducto.producto.idProd,typeMismatch.idProd,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [permisosList.permisosProducto[137].producto.idProd,permisosProducto[137].producto.idProd]; arguments []; default message [permisosProducto[137].producto.idProd]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'permisosProducto[137].producto.idProd'; nested exception is java.lang.NumberFormatException: For input string: ""]
Field error in object 'permisosList' on field 'permisosProducto[338].permiso': rejected value []; codes [typeMismatch.permisosList.permisosProducto[338].permiso,typeMismatch.permisosList.permisosProducto.permiso,typeMismatch.permisosProducto[338].permiso,typeMismatch.permisosProducto.permiso,typeMismatch.permiso,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [permisosList.permisosProducto[338].permiso,permisosProducto[338].permiso]; arguments []; default message [permisosProducto[338].permiso]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'permisosProducto[338].permiso'; nested exception is java.lang.NumberFormatException: For input string: ""]
Field error in object 'permisosList' on field 'permisosProducto[573].permiso': rejected value []; codes [typeMismatch.permisosList.permisosProducto[573].permiso,typeMismatch.permisosList.permisosProducto.permiso,typeMismatch.permisosProducto[573].permiso,typeMismatch.permisosProducto.permiso,typeMismatch.permiso,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [permisosList.permisosProducto[573].permiso,permisosProducto[573].permiso]; arguments []; default message [permisosProducto[573].permiso]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'permisosProducto[573].permiso'; nested exception is java.lang.NumberFormatException: For input string: ""]
Field error in object 'permisosList' on field 'permisosProducto[808].permiso': rejected value []; codes [typeMismatch.permisosList.permisosProducto[808].permiso,typeMismatch.permisosList.permisosProducto.permiso,typeMismatch.permisosProducto[808].permiso,typeMismatch.permisosProducto.permiso,typeMismatch.permiso,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [permisosList.permisosProducto[808].permiso,permisosProducto[808].permiso]; arguments []; default message [permisosProducto[808].permiso]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'permisosProducto[808].permiso'; nested exception is java.lang.NumberFormatException: For input string: ""]
我已经检查过那些索引处的信息是正确的,所以任何地方都没有空字段(那为什么一旦提交数据就会有空字段?)。我还注意到这些索引并不总是相同的。也许如果我重新启动 tomcat 或者我在几分钟后重试,错误中的索引是不同的。 并且只发生在包含至少 200 个以上对象的列表中。并且在到达 Controller 之前抛出异常。
这是我的 PermisoList 类:
public class PermisoList {
List<PermisoProductoForm> permisosProducto;
List<PermisoCarpetaForm> permisosCarpeta;
List<PermisoTipoDocForm> permisosTipoDoc;
List<PermisoAgenteClienteForm> permisosAgenteCliente;
List<PermisoIdiomaForm> permisosIdioma;
List<PermisoPaisForm> permisosPais;
List<PermisoEmpresaForm> permisosEmpresa;
List<PermisoUsuarioProductoForm> permisosUsuarioProducto;
...
}
我的 PermisoProductoForm 类:
public class PermisoProductoForm {
private Producto producto;
private int permiso;
...
}
还有我的 Producto 类:
@Entity
@Table(name = "Producto")
public class Producto {
@Id
@GeneratedValue
private int idProd;
private String codigo;
private String nombre;
private String marca;
private boolean activo;
@ManyToOne
@JoinColumn(name = "idFamilia")
private Familia familia;
@OneToMany(mappedBy = "producto", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Documento> documentacion;
@ManyToOne
@JoinColumn(name = "idEmpresa")
private Empresa empresa;
@OneToMany(mappedBy = "primaryKey.producto", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<PermisoUsuarioProducto> permisosProducto;
@OneToMany(mappedBy = "productoRelacionado", fetch = FetchType.LAZY)
private List<TemaForo> temasForo;
...
}
此外,我已经尝试了一些我发现的解决方案,比如将这段代码添加到 Controller 中:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAutoGrowCollectionLimit(2048);
}
或者在jsp代码的form标签内添加enctype="multipart/form-data"
有谁知道为什么会这样或者知道如何解决这个问题?我现在 100% 卡住了。
编辑:我已经完成@angcap 回答的内容(将 int 更改为 Integer 类型并在 initBinder 方法中添加 CustomEditor),现在不再抛出此 BindException。所以到达 Controller 。
现在发生的情况是那些具有空字符串的索引现在具有“空”值(由于 CustomEditor)。正如我所说,我在提交表单之前检查了信息,我可以看到列表中的所有对象都正常,没有一个元素的字段为空。
那么,当列表非常大时,Spring 为什么要对数据执行此操作?而且它似乎对随机索引执行此操作...
编辑 2: 这是一个 TOMCAT 问题! 我已经在 Pivotal tc Server (v3.1) 上部署了 binder.setAutoGrowCollectionLimit( 2048);
解决方案,没有任何异常或空字符串或 null。功能齐全。
所以问题出在tomcat(v8.0)配置上。有人知道这件事吗?
编辑 3: 我接受 @angcap 的回答,因为它确实解决了我最初的问题。按照他所说的去做,就避免了 BindException。
最佳答案
您似乎为数字字段 idProd
和 permiso
发布了空字符串。检查发布的数据或尝试注册 CustomNumberEditor允许在 Controller 中使用 @initBinder 来使用 empyValues。
关于java - Spring 形式 : BindException when submiting large list of objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38303884/
我遵循了一本名为“Sitepoint Full Stack Javascript with MEAN”的书中的教程,我刚刚完成了第 6 章,应该已经创建了一个带有“数据库”的“服务器”。数据库只不过是
在 Jquery 中,我创建两个数组,一个嵌入另一个数组,就像这样...... arrayOne = [{name:'a',value:1}, {name:'b',value:2}] var arra
这个问题在这里已经有了答案: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wa
我被放在别人的代码上,有一个类用作其他组件的基础。当我尝试 ng serve --aot(或 build --prod)时,我得到以下信息。 @Component({ ...,
我正在测试一些代码,并使用数据创建了一个 json 文件。 问题是我在警报中收到“[object Object],[object Object]”。没有数据。 我做错了什么? 这是代码:
我想打印 [object Object],[object Object] 以明智地 "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1' }]]"; 在 ja
我有一个功能 View ,我正在尝试以特殊格式的方式输出。但我无法让列表功能正常工作。 我得到的唯一返回是[object Object][object Object] [object Object]
在使用优秀的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题: 一路走来,它使用了 THREE.Ray 的下一个构造函数: var ray = new THRE
我正在使用 Material UI 进行多重选择。这是我的代码。 {listStates.map(col => (
我的代码使用ajax: $("#keyword").keyup(function() { var keyword = $("#keyword").val(); if (keyword.
我遇到了下一个错误,无法理解如何解决它。 Can't resolve all parameters for AuthenticationService: ([object Object], ?, [o
我正在尝试创建一个显示动态复选框的表单,至少应选中其中一个才能继续。我还需要获取一组选中的复选框。 这是组件的代码: import { Component, OnInit } from '@angul
我正在开发 NodeJs 应用程序,它是博客应用程序。我使用了快速验证器,我尝试在 UI 端使用快速闪存消息将帖子保存在数据库中之前使用闪存消息验证数据,我成功地将数据保存在数据库中,但在提交表单后消
我知道有些人问了同样的问题并得到了解答。我已经查看了所有这些,但仍然无法解决我的问题。我有一个 jquery snipet,它将值发送到处理程序,处理程序处理来自 JS 的值并将数据作为 JSON 数
我继承了一个非常草率的项目,我的任务是解释为什么它不好。我注意到他们在整个代码中都进行了这样的比较 (IQueryable).FirstOrDefault(x => x.Facility == fac
我只是在删除数组中的对象时偶然发现了这一点。 代码如下: friends = []; friends.push( { a: 'Nexus', b: 'Muffi
这两个代码片段有什么区别: object = nil; [object release] 对比 [object release]; object = nil; 哪个是最佳实践? 最佳答案 object
我应该为其他人将从中继承的第一个父对象传递哪个参数,哪个参数更有效 Object.create(Object.prototype) Object.create(Object) Object.creat
我在不同的对象上安排不同的选择器 [self performSelector:@selector(doSmth) withObject:objectA afterDelay:1]; [self per
NSLog(@"%p", &object); 和 NSLog(@"%p", object); 有什么区别? 两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。 最佳答案 这就是我喜欢的
我是一名优秀的程序员,十分优秀!