InvalidPropertyException: Invalid property 'emp[accountName]' of bean class [com.ht.vo.NoticeDetailV

34 篇文章 0 订阅
28 篇文章 0 订阅

 JDK1.7+Tomcat7.0+Eclipse+SSM+Bootstrap(含Bootstrap Table)   

三月 09, 2019 10:27:52 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [SpringMVC] in context with path [/HTGlory] threw exception [Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'emp[accountName]' of bean class [com.ht.vo.NoticeDetailVo]: Property referenced in indexed property path 'emp[accountName]' is neither an array nor a List nor a Map; returned value was []] with root cause
org.springframework.beans.InvalidPropertyException: Invalid property 'emp[accountName]' of bean class [com.ht.vo.NoticeDetailVo]: Property referenced in indexed property path 'emp[accountName]' is neither an array nor a List nor a Map; returned value was []
	at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1058)
	at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:927)
	at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:95)
	at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:749)
	at org.springframework.validation.DataBinder.doBind(DataBinder.java:645)
	at org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:189)
	at org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:106)
	at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.bindRequestParameters(ServletModelAttributeMethodProcessor.java:150)
	at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:110)
	at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77)
	at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

报这个错,先看看我的页面的脚本代码:

<script src="../bootstrap/js/jquery-1.12.4.min.js"></script>
	<script src="../bootstrap/table/bootstrap-table.js"></script>
	<script src="../bootstrap/table/bootstrap-table-zh-CN.js"></script>
	<script src="../bootstrap/js/bootstrap.min.js"></script>
	<script src="../tableExport/tableExport.js"></script>
	<script src="../bootstrap3-editable/js/bootstrap-editable.js"></script>
	<script src="../bootstrap3-editable/js/bootstrap-table-export.min.js"></script>
	<script src="../bootstrap/table/bootstrap-table-editable.js"></script>
	<link rel="stylesheet" href="../bootstrap3-editable/css/bootstrap-editable.css">
	<link rel="stylesheet" href="../bootstrap/table/bootstrap-table.css">
	<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
	<!-- 提示框插件 -->
	<link rel="stylesheet" href="../bootstrap/toastr/toastr.css">
<script>
    	var pid=0;
    	var oTable="";
    	var colVal="";
	    $(function () {
	        //1.初始化Table
	        oTable = new TableInit();
	        oTable.Init();
			//获取body的高度
	        var bodyHeight = $('body').height();
	        //表格自适应
	        //$('#tb_departments').bootstrapTable('resetView', {height: bodyHeight});
	        //2.初始化Button的点击事件
	        var oButtonInit = new ButtonInit();
	        oButtonInit.Init();
	    });
	    
	    var TableInit = function () {
	        var oTableInit = new Object();
	        //初始化Table
	        oTableInit.Init = function () {//初始化bootstrap-table的内容
	            $('#tb_departments').bootstrapTable({
	                url: '${pageContext.request.contextPath}/noticeDetail/list',         //请求后台的URL(*)
	                method: 'post',                      //请求方式(*)
	                toolbar: '#toolbar',                //工具按钮用哪个容器
	                striped: true,                      //是否显示行间隔色
	                cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
	                pagination: true,                   //是否显示分页(*),为false的话,pageNumber、pageSize、pageList属性没有用了
	                //sortable: true,                     //是否启用排序,其实在这里是个多余,因为放在字段里用,才有用,因为若传给后台,是要传字段的!!!
	                //sortOrder: "desc",                   //排序方式,(只针对sidePagination为server时)asc的话[没有这个属性,默认asc],无论有没有点列的排序图标,都会和search一样传给后台,值为asc(升序排序),desc的话,亦然!!!
	                sidePagination: "server",           //分页方式:client客户端分页【搭配exportDataType的all,则:不会传offset limit( search sort sortOrder)到后台,页面自己会自动加载(pageNumber)第一页,自动每页(pageSize)5条记录,当搜索时不进后台,局部的当前的查找,但查找有误】,server服务端分页(*)【搭配exportDataType的basic,则:传offset limit与search sortOrder sort(若search:true)到后台,给SQL语句分页;当搜索时会进后台,使用SQL语句模糊查询】
	                queryParams: oTableInit.queryParams,//传递参数(*)
	                //queryParamsType:'',
	                pageNumber:1,                       //初始化加载第一页,默认第一页
	                pageSize: 5,                       //每页的记录行数(*)
	                pageList: [5, 25, 50, 100],        //可供选择的每页的行数(*)
	            	//onlyInfoPagination:false, //设置为 true 只显示总数据数,而不显示分页
	                search: true,                       //是否显示表格搜索,(只针对sidePagination为server时,因为会传值至后台)true的话,显示出来一个搜索框,但是要另外控制"查询什么",好像是这样的,不然,怎么搜都显示的不对呀;此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
	                strictSearch: true,				//启用严格搜索
	                showColumns: true,                  //是否显示所有的列
	                showRefresh: true,                  //是否显示刷新按钮
	                minimumCountColumns: 2,             //最少允许的列数
	                clickToSelect: true,                //是否启用点击选中行
	                //height: 560,                        //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
	                uniqueId: "noticeId",                     //每一行的唯一标识,一般为主键列
	                showToggle:true,                    //是否显示详细视图和列表视图的切换按钮
	                cardView: false,                    //是否显示详细视图
	                detailView: false,                   //是否显示父子表
					showExport: true,					//是否显示导出
					exportDataType: "all",              //basic', 'all', 'selected'(与showExport一起的,当为all时,export导出可以导出全部数据,当为basic是,只能导出当前页的记录)
	                exportOptions:{
			            ignoreColumn: [0],  //忽略某一列的索引,忽略下标为0的列
			            fileName: '通知公告表',  //文件名称设置
			            worksheetName: '通知公告',  //表格工作区名称
			        },
	                columns: [{
	                    checkbox: true
	                }, {
	                    field: 'title',
	                    title: '标题',
	                    align: "center",
	                    valign: "middle",
	                    sortable: true,//true的话,出现排序的上下三角形图标;当sidePagination: client时,点第一次都是,自动排序asc,第二次才是desc,即先(字母表、数字)asc升序再desc降序(而当sidePagination:server时传后台field的值)
	                    editable : {//按了√才会到这里
							type : 'text',
							validate : function(v) {
								if(!v)
									return '不能为空';
							}
						}
	                }, {//时间,我想,这种排版:星期一(19:00-21:00)【week(startTime-endTime)】
	                    field:'typeName',
	                    title: '公告类别',
	                    align: "center",
	                    valign: "middle"
	                }, {
	                    field: 'emp.empName',
	                    title: '发布人',
	                    align: "center",
	                    sortable: true,//true的话(只针对sidePagination为server时)才会传值于后台成功
	                    valign: "middle"
	                }, {
	                    field: 'noticeTime',
	                    title: '发布时间',
	                    align: "center",
	                    valign: "middle"
	                }
	                    	 <%--
	                ,{
	                    title: '操作',
	                    align: 'center',
	                    valign: "middle",
	                    events:operateEvents,//按钮绑定事件
	                    formatter:function(value,row,index){  
	                    	var e = '<button  style="display: block;margin-top:5px;" type="button" class="btn btn-default btn-xs" id="update">'+
	                         '<i class="glyphicon glyphicon-pencil"></i>编辑</button>';
	                       var d = '《 a  style="display: block;margin-top:5px;" class="btn btn-info btn-xs" onclick="view(\''+ index + '\')"》'+
	                         '《i class="glyphicon glyphicon-list-alt" 》《/i》查看《 /a 》';  
	                        return e;  
	                    }}
	                        --%>
	                    ]
	                	,onClickRow : function(row, tr,flied){
	                    	//alert(row.planId);
	                    	//pid=row.planId;
	                	},onEditableSave: function (field, row, oldValue, $el) {
	    					$.ajax({//编辑后保存
				                type: "post",
				                url: "${pageContext.request.contextPath}/noticeDetail/add",
				                data: row,
				                dataType: 'text',
				                success: function (data, status) {
				                    if (status == "success") {
				                    	toastr.success('提交数据成功');
				                    }
				                },
				                error: function (e) {
				                    alert(e.status);
				                },
				                complete: function () {
									
				                }
				            });
				        }
	            });
	        };
	        //得到查询的参数
	        oTableInit.queryParams = function (params) {
	            var temp = {   //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
	                offset: params.offset,  //数据库查询起始位置
	                limit: params.limit,   //每页显示记录数
	                search:params.search,//查询,  search为true,才会将search变量传进后台
	                sort: params.sort,      //排序列名  , sortable为true而且点击了有“sortable: true”的字段旁的排序图标,才会将sort变量传进后台 
                    sortOrder: params.order //排位命令(desc,asc) , 有sortOrder属性且有值:若为"desc",  传desc;若为asc,传asc(没有sortOrder为true,默认传asc至后台)
	             };
	            return temp;
	        };
	        return oTableInit;
	    };
	    var ButtonInit = function () {
	        var oInit = new Object();
	        var postdata = {};
	
	        oInit.Init = function () {
	            //初始化页面上面的按钮事件
	        };
	        return oInit;
	    };
......忽略新增修改删除的点击事件控制代码...............	            
    </script>

我的页面jsp的body

<body>
	<div id="toolbar" class="btn-group">
            <button id="btn_add" type="button" class="btn btn-default" data-toggle="modal" data-target="#modal-1">
                <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>新增
            </button>
            <button id="btn_edit" type="button" class="btn btn-default">
				<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
			</button>
            <button id="btn_look" type="button" class="btn btn-default">
				<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>查看
			</button>
            <button id="btn_delete" type="button" class="btn btn-default" onclick="del()">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
            </button>
            <button id="btn_bad" type="button" class="btn btn-default">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>作废
            </button>
        </div>
<!--主要看这个table标签这行 -->
        <table id="tb_departments"></table>
.....新增的模态框...就此忽略(因为不涉及)
</body>

脚本代码,大多数都是为了显示列表:

学习:

JS表格组件神器bootstrap table详解(基础版) 

想了解更多bootstrap组件、插件:

Bootstrap(插件、使用方法)详解

【bootstrap-table插件Zip提取链接:https://pan.baidu.com/s/1r7CHZXiPD9Tbkl0RBDc3yw,提取码:rh50】

我的DAO:

 

我的Service:

我的Controller:

一启动,没有报错,是正常的(此时最好,按f12打开谷歌DevTools检查工具):

报错由来:当我要改“标题”列的记录,并点击“√”,然后。。。

 我看DevTools的NetWork,发现跟想的不一样(找add):

(其实,就是因为这个列,导致了控制台里出现异常) 

改:

改data就行了 

若用公共变量赋值于colValue的话: 

(NoticeDetailController.java) 

 看谷歌的DevTools工具,传的值只有三个,而且都是我想传的,没有多余!!!

(NoticeDetailDAO.xml) 

(NoticeDetailDAO.java)

(NoticeDetailService.java)

(控制台) 

 MyBatis“显示SQL语句”

(数据库)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yvette_QIU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值