问题描述
publicclassUserDaoPostextendsDeclarativeWebScript{privateEducationServiceRegistrylemServiceRegistry;publicvoidsetLemServiceRegistry(EducationServiceRegistrylemServiceRegistry){this.lemServiceRegistry=lemServiceRegistry;}@OverrideprotectedMap<String,Object>executeImpl(WebScriptRequestreq,Statusstatus,Cachecache){Contentc=req.getContent();Useruser=newUser();JSONObjectjson;Map<String,Object>map=newHashMap<String,Object>();try{json=newJSONObject(c.getContent());intid=Integer.parseInt((String)json.get("id"));Stringname=(String)json.get("name");intage=Integer.parseInt((String)json.get("age"));user.setId(id);user.setName(name);user.setAge(age);map.put("user",user);}catch(JSONExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnmap;}publicvoidinsert(Useruser)throwsException{Connectionconn=JdbcUtil.getConn();Stringsql="insertintotest1values(?,?,?)";PreparedStatementpstm=conn.prepareStatement(sql);pstm.setInt(1,user.getId());pstm.setString(2,user.getName());pstm.setInt(3,user.getAge());pstm.executeUpdate();if(conn!=null)conn.close();if(pstm!=null)pstm.close();}}第一个方法已经没问题,但是debug后发现跳到returnmap就直接跳出程序了并不执行下面的方法,我想在下面的方法里获取到map,怎么办?
解决方案
解决方案二:
不知道你接下来要执行哪个方法,把map定义为static试试,这样整个类中就都可以引用到了。
解决方案三:
执行下面的insert方法
解决方案四:
第一个方法是接收浏览器传来的id,name,age,下面的方法是将接收的插入数据库【北京】不懂2014/7/111:33:24接收的都放在map里面了但是传不下去11:34:35【北京】不懂2014/7/111:34:35我又在insert方法里写了Map<String,Object>map=this.executeImpl(null,null,null);想调用到上面的方法,接收到返回的map但是debug了还是不执行insert到returnmap直接跳出去了
解决方案五:
executeImpl这个方法的return直接就跳出方法了。不会执行后面的代码了。你想在后面的insert方法里面调用map,可以直接将map声明为static类型。如果想executeImpl执行完就执行insert方法,那就再return上一行调用insert。上面的只是参考建议。楼主的这个类,说是service层又不像service层,说是dao层,又不像dao层。我觉得楼主的思路有些乱,可以理一下。
解决方案六:
publicstaticMap<String,Object>map=newHashMap<String,Object>();在insert方法里不再声明map对象而是引用静态map给它赋值
解决方案七:
你不能获取到executeImpl返回值么?获取到了返回值就把他传给insert不就好了。获取不到的话可以考虑在executeImpl里面执行insert不知道你这个类每次请求是不是都会实例化,不敢说类里面定义一个变量来弄,因为如果仅实例化一次,就像servlet一样会导致并发问题,定义static变量就毫无疑问的会有并发问题了。
解决方案八:
谢谢各位的回答!我获取到了executeimpl的返回值,就是map,想把它传给insert,但是不知道怎么才能传到
解决方案九:
publicstaticMap<String,Object>map=newHashMap<String,Object>();这么写会报错的Eclipse提示publicstatic是多余的,让我移除
解决方案十:
将publicstaticMap<String,Object>map=newHashMap<String,Object>();放在publicclassUserDaoPostextendsDeclarativeWebScript{下面static变量是类级别的,不能在方法中定义楼主去查看下static的作用。
解决方案十一:
publicclassUserDaoPostextendsDeclarativeWebScript{privateEducationServiceRegistrylemServiceRegistry;publicvoidsetLemServiceRegistry(EducationServiceRegistrylemServiceRegistry){this.lemServiceRegistry=lemServiceRegistry;}publicstaticMap<String,Object>map=newHashMap<String,Object>();@OverrideprotectedMap<String,Object>executeImpl(WebScriptRequestreq,Statusstatus,Cachecache){Contentc=req.getContent();Useruser=newUser();JSONObjectjson;try{json=newJSONObject(c.getContent());intid=Integer.parseInt((String)json.get("id"));Stringname=(String)json.get("name");intage=Integer.parseInt((String)json.get("age"));user.setId(id);user.setName(name);user.setAge(age);map.put("user",user);}catch(JSONExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{insert(map);}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnmap;}publicvoidinsert(Map<String,Object>map)throwsException{//Map<String,Object>map=this.map;SetkeySet=map.keySet();Iteratorit=keySet.iterator();while(it.hasNext()){Stringkey=(String)it.next();Objectvalue=map.get(key);}Useruser=newUser();user=(User)String.valueOf(value);Connectionconn=JdbcUtil.getConn();Stringsql="insertintotest1values(?,?,?)";PreparedStatementpstm=conn.prepareStatement(sql);pstm.setInt(1,user.getId());pstm.setString(2,user.getName());pstm.setInt(3,user.getAge());pstm.executeUpdate();if(conn!=null)conn.close();if(pstm!=null)pstm.close();}}进入到insert方法了,但是传进来的是map,怎么把map里面的user取出来
解决方案十二:
上面的executeImpl方法里调用直接把user对象传过去不就搞定了么,怎么又把insert参数改掉了