如题 target is null for setProperty(null, "name", [Ljava.lang.String;@ffc6ae)
严重: Could not create and/or set value back on to object
Method "setProductType" failed for object net.epsshop.action.admin.ProductTypeAction@163bad4 - Class: ognl.OgnlRuntime
File: OgnlRuntime.java
Method: callAppropriateMethod
Line: 1265 - ognl/OgnlRuntime.java:1265:-1
ognl.MethodFailedException: Method "setProductType" failed for object net.epsshop.action.admin.ProductTypeAction@163bad4 [java.lang.NoSuchMethodException: net.epsshop.action.admin.ProductTypeAction.setProductType($Proxy39)]
警告: Error setting expression 'productType.name' with value '[Ljava.lang.String;@ffc6ae'
get和set方法都有
这个破问题困扰我一天,以前遇到过,又忘了。。。(哎,人老了记性不太好了)
解决:
将
private ProductType productType ;
改成
private ProductType productType = new ProductType(); //初始化(其实我到现在都郁闷,以前都是没有初始化怎么都没出错,有高手路过的,知道原因的请告诉在下,谢谢了!)
<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->
国内的好多应用市场都宣传自己是国内最大的 android 市场,这是真的吗?下面就来看下各大市场的千姿百态吧。
我只谈下我认为有点小小意见的市场吧。
A 市场是比较规范的,为了能上传应用,还专门给我发来一个 APK 文件叫我签名,还附带了一个命令行文件,可是我之前签名都是用 ECLIPSE 直接导出的,不会使用命令行:(,看了半天,只有一点没搞清楚,命令行的最后写了一个 123 。这 123 到底是什么呢?生成了一晚上都没好,最后索性把签名文件发过去了。第二天晚上回家一收邮件,给了一个 15M 的视频文件,里面说的是怎么创建签名文件,然后怎么用命令行签名发过来的 APK 文件,最后才搞清楚,那个 123 是别名。晕, ~~ 这么大的视频文件挂在市场的某个地方给个连接不就行了 ~~
B 市场也比较规范,注册后发布。最让人受不了的是,上传时我的 IE9 不支持 FLASH 上传,只能使用普通方式上传。在普通方式里,最令人恶心的是,没有上传图片的按钮,点击图片位置不能上传图片。不知道是不是我的 IE 的安全级别设置高了,修改了半天还是不行,那就打开虚拟机,用 IE6 上传,结果成功了,上传图片后说是等待审核。晕阿 ~~ 如果做不出高水平的东西的话,那就加一个上传按钮,就应该能弹出文件选择框了吧。等待中,一直也没收到邮件,我想那肯定是上传成功了吧。
在第二个应用上传的时候发现第一个应用上传的图片不合规范,我晕 ~~ 和不和规范难道上传完了不能检查吗?看来是靠人工看的,要不当时就能告诉我上传图片有问题:)最令人生气的是,没有邮件提醒,我还以为成功了。
第二个应用更扯,第一天说超限了,叫我修改。好吧,那就更换内容,再次提交 ~~ 我想现在应该可以了吧。结果晚上回去一看,顶你个肺,下架了,大体意思是说,我们这里不发布这样的应用 ~~ 不发布这样的应用,那还叫我改什么,我就比较奇怪了,为什么 A 市场可以呢,还是带着测试广告成功的 ~~
既然这样那就算了吧,赶快把自己的资料全部改成 1 ,保存,拜拜 ~~
GCD的核心,是一些全局并发队列,它们可以被用dispatch_get_global_queue函数访问:
dispatch_queue_t dispatchQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
方法的第一个参数是调度队列的优先级。第二个参数保留,当前必须设0。队列的优先级越高,(在理想情况下)其中的任务就会被越快地执行。第一个参数可以传递的值有:
DISPATCH_QUEUE_PRIORITY_HIGH:高优先级。
DISPATCH_QUEUE_PRIORITY_DEFAULT:中优先级。
DISPATCH_QUEUE_PRIORITY_LOW:低先级。
DISPATCH_QUEUE_PRIORITY_BACKGROUND:最低的优先级。
除了全局并发队列,还可以使用main queue。每个应用程序最多拥有一个主队列。主队列和全局并发队列之间的不同是,主队列永远在主线程执行代码,而全局并发队列对代码的执行依赖于系统的决定和由GCD创建与管理的各种其它线程。
为了获取应用程序的主队列,必须如下使用dispatch_get_main_queue函数:
dispatch_queue_t mainQueue = dispatch_get_main_queue();
/* Dispatch tasks to the queue */
现在,我们知道了如何取得全局并发队列和主队列的句柄。但问题是:我们如何在这些队列执行一段代码呢?答案很简单:使用某个dispatch_过程。下面是其中的几种口味:
dispatch_sync:提交块对象给指定的调度队列,同步执行。
dispatch_async:提交块对象给指定的调度队列,异步执行。
dispatch_once:提交块对象给指定的调度队列,在应用程序有效期中仅执行一次。调用相同的方法,传递相同的块对象给任何调度队列都将立即返回,而不会再次执行块对象。
dispatch_sync过程在全局并发队列中执行我们的块对象,这意味着块对象将在主线程以外的其他线程中被执行。同时,由于dispatch_sync过程的天性,代码的执行将阻塞并发队列直至其完成。然后第二个同步调度发生,依此类推;直至我们先要给用户显示消息的地方。在这个情况下,我们在主队列中执行我们的块对象,因为所有的UI相关代码(显示、隐藏,向窗口添加视图等)需要在主线程中执行。
我们还应当看看先前讨论过的dispatch_once过程。该过程在指定的调度队列中执行块对象,在应用程序生存期中,仅执行一次。使用dispatch_once过程时,必须注意几件事:
1. 本过程会阻塞。换句话说,它是同步的,它将阻塞其所运行于的调度队列直至代码执行完全。
2. 和dispatch_sync、dispatch_async不同,本过程没有使用一个调度队列作为参数。默认情况下,它将在当前的调度队列执行任务。
调用dispatch_get_current_queue函数获得当前的调度队列。
3. 本过程的第一个参数是dispatch_once_t类型的指针。这是本过程保持追踪哪些块要执行、哪些块不要执行的方式。举例来说,如果你调用本过程,为该参数传入两个不同的指针,但传入的是完全相同的块对象,那么,块对象将被执行两次,因为传入的两个指针指向不同的内存块。
4. 本过程的第二个参数是要被执行的块对象。该块对象必须返回void,并且不能有参数。