NutzCN Logo
精华 在action层调用service层的方法,显示空指针
发布于 3188天前 作者 qq_64828a7b 1902 次浏览 复制 上一个帖子 下一个帖子
标签:

我想用action层的一个类去调用service层的方法,service层用来逻辑处理,action层用来链接前端和后台,代码如下
action层的类
@At
public Object oneToMany(@Param("..")ProductInfo productInfo){
System.out.print(productInfo.getName());

     this.productInfoService.oneToMany(productInfo);
     return "gj";
 }
 service层的方法
  public Object oneToMany(ProductInfo  productInfo){
//   System.out.println(productInfo.getLeixing());
    int b= checkCateGoryInfo(productInfo.getLeixing());
     NutMap re = new NutMap();
     CateGoryInfo master = new CateGoryInfo();
     List<ProductInfo> productInfos = new ArrayList<ProductInfo>();
     if(b<0){   //数据表没有这种产品类型
        master.setName(productInfo.getLeixing());

            productInfos.add(productInfo);
      //  System.out.println( productInfos.get(0).getName());
            master.setProductInfoList(productInfos);          
            dao.insertWith(master, "productInfoList");
            return re.setv("ok", "插入成功");
     }
     else{   //数据表中有这种产品类型
            productInfos.add(productInfo);
            CateGoryInfo categoryinfo=dao.fetch(CateGoryInfo.class, Cnd.where("name", "like", productInfo.getLeixing()));
            productInfo.setcateId(categoryinfo.getId());
            dao.insert(productInfo);
            return re.setv("ok", "插入成功");
     }    

 }
 控制台显示空指针,请问怎么回事?
11 回复

哪行空指针

@wendal 我的productAction类

public class productAction {
@Inject // 注入同名的一个ioc对像
private ProductInfoService productInfoService;

 @At
 public Object add(@Param("..")ProductInfo  productInfo) {// 两个点号是按对象属性一一设置
     System.out.print(productInfo.getName());

     return productInfoService.add(productInfo);
    }
 @At
 public Object oneToMany(@Param("..")ProductInfo  productInfo){
     System.out.print(productInfo.getName());

     this.productInfoService.oneToMany(productInfo);
     return "gj";
 }

}

执行到this.productInfoService.oneToMany(productInfo);

就说空指针了,我怀疑是productInfoService这个对象是空的,

action类没加@IocBean

@wendal 有添加

@IocBean // 声明为Ioc容器中的一个Bean
@At("/productaction") // 整个模块的路径前缀
@Ok("json:{ignoreNull:true}") // 忽略password和salt属性,忽略空属性的json输出
@Fail("http:500") // 抛出异常的话,就走500页面
//@Filters(@By(type=CheckSession.class, args={"me", "/"}))//登录后才能访问的入口方法
////已经HttpSession中已经包含me这个attr,所以,这个过滤器会判定为已经登录
//含义是,如果当前Session没有带me这个attr,就跳转到/页面,即首页.
public class productAction {
@Inject // 注入同名的一个ioc对像
private ProductInfoService productInfoService;

@qq_64828a7b 是不是又在js里面声明了同名的bean

@wendal 这是我的JS

var ioc = {
dataSource : {
type : "com.alibaba.druid.pool.DruidDataSource",
events : {
create : "init",
depose : 'close'
},
fields : {
url : "jdbc:mysql://127.0.0.1:3306/mis",
username : "root",
password : "xianliyi",
testWhileIdle : true,
validationQuery : "select 1" ,
maxActive : 100
}
},
dao : {
type : "org.nutz.dao.impl.NutDao",
args : [{refer:"dataSource"}]
},
productAction:{
type:"storepos.com.main.action.productAction"
}
};

@qq_64828a7b 果然嘛,删掉对应的声明

@wendal 哦哦,我知道了,能不能解释一下,js到底怎么用的?

@qq_64828a7b 声明一些无法用注解声明的类,这些类一般不是你自己项目中类

另外一些用法根据环境换不同的实现,写在注解的话就不好换

添加回复
请先登陆
回到顶部