JAVAWeb、 Easyui、Ibatis、Oracle项目遇到问题及解决方法

来源:互联网 发布:淘宝c店运营 编辑:程序博客网 时间:2024/04/28 17:15

                  项目开发中遇到的问题和解决方式

 

 

 

1. Easyui属性,事件和方法的使用方式,使用中遇到的问题和解决方法.........................2

1.1属性,事件和方法的使用..................................................................................2

1.1.1    属性:$(“jq选择器语法”).插件({属性:’属性值根据属性值类型决定是否待单引号或双引号’});   2

1.1.2事件的使用................................................................................................2

1.1.3方法的使用................................................................................................3

1.2遇到的问题和解决方法.........................................................................................3

1.2.1 datagrid问题......................................................................................3

1.2.1.1如何在行里增加html标签或者对某列数据进行处理......................3

使用列属性中的formatter事件function(此行此列的值,此行的数据对象,此行的索引)    3

1.2.1.2点击某一行禁止选中........................................................................3

1.2.1.3在有复选框datagrid中,出现使用 load刷新事件和选中一个点击分页,全选的情况。  4

1.2.1.4获取选中复选框的数据....................................................................4

1.2.2 combobox支持模糊查询............................................................................4

1.2.3消息定位问题............................................................................................4

2.Oracle存储过程遇到的问题和解决方法......................................................................5

2.1编写存储过程.......................................................................................................5

2.2 存储过程使用到的功能..................................................................................5

2.2.1循环一个数据集........................................................................................5

2.2.2根据某字符分割字符串循环分割的数据.....................................................6

2.2.3存储过程返回数据集.................................................................................6

3.Javaee jsp网站开发中使用的问题..................................................................................8

3.1页面网站目录问题...............................................................................................8

3.2在页面上调用类文件...........................................................................................8

3.3获取配置文件信息 配置文件  booksetpro.properties的配置数据........................8

3.4创建一个类网站启动时就执行,此类的生命周期和网站生命周期是一致的。.....9

3.5 struts2中控制器的配置......................................................................................10

3.6 mybatis调用存储过程返回数据集......................................................................10

3.6 mybatis如何使用 in()........................................................................................11

3.7 struts2 jsp页面返回 json数据......................................................................12

 

1. Easyui属性,事件和方法的使用 方式,使用中遇到的问题和解决方法

  1.1属性 ,事件和方法的使用

     使用 Easyui 建议使用js注册的方式使用,这样html代码比较整洁,使用也灵活。

   以datagrid为列,引用js最好放到页面最下方,因为js文件顺序加载,放到顶部会拖慢页面渲染速度.

1.1.1    属性:$(“jq选择器语法”).插件({属性:’属性值根据属性值类型决定是否待单引号或双引号’});

如:$('#dg').datagrid({   

url:'datagrid_data.json',   

    columns:[[   

        {field:'code',title:'Code',width:100},  

        {field:'name',title:'Name',width:100},  

        {field:'price',title:'Price',width:100,align:'right'}  

    ]]   

});

1.1.2事件的使用

$(“jq选择器语法”).插件({事件名称:function(参数,参数){}});

如:$("#list_data").datagrid({onLoadSuccess:function() {

}});

1.1.3方法的使用

$(“jq选择器语法”).插件(“方法名称”,参数,参数);

如: $("#list_data").datagrid('unselectRow', 1);

1.2遇到的问题和解决方法

1.2.1 datagrid 问题

   1.2.1.1 如何在行里增加html 标签或者 对某列数据进行处理

        使用 列属性中的formatter 事件function(此行此列的值,此行的数据对象,此行的索引)

   {field:'BR_USERID',title:'借阅人',width:100,sortable:true,hidden:true},

            {field:'borrow',title: '图书借阅',align: 'center',width:120,                    

                        formatter:function(value,rowData,rowIndex){

 return "<aclass=\"sqjy\"   data-options=\""+isdianji+"\"  style='height:20px'  href='javascript:void(0)'>操作</a>";}}

 

rowData 是行对象 rowData.BR_USERID 就可以获取到BR_USERID 的值。

这样就可以在行里增加html标签了,如果想使用easyui的按钮在onLoadSuccess的事件中注册就可以使用了

 onLoadSuccess: function () {

     $('.sqjy').linkbutton({   

            text: '图书借阅',

            onClick:function(){            }  

            });

}

1.2.1.2 点击某一行禁止选中

 onClickRow: function (rowIndex, rowData) {

                            $(this).datagrid('unselectRow', rowIndex);

                        }

1.2.1.3 在有复选框datagrid 中,出现使用 load 刷新事件和选中一个点击分页,全选的情况。

数据加载完 执行全部撤销选中的方法

 onLoadSuccess: function() { $(this).datagrid('unselectAll');}

1.2.1.4 获取选中复选框的数据

复选框列属性

 {field:'sqcheck',title:'图书编号',width:80,checkbox:true},

 {field:'BK_ID',title:'图书id',width:40},

 

 var ldar= $("#list_data").datagrid("getRows");//获取所有行

//sqcheck就是field的值

      $("input[name='sqcheck']:checked").each(function(i,n){

     var sqindex= $(this).index("input[name='sqcheck']");//获取行索引

         plsqid+=ldar[sqindex].BK_ID+",";//获取行中某个列的值

      });

1.2.2 combobox支持模糊查询

使用 filter 过滤器事件

filter: function(q, row){

                var opts = $(this).combobox('options');

                return row[opts.textField].indexOf(q)!=-1;//q 输入的值是否在  某一个项中存在,存在返回true 否则false

            }

1.2.3消息定位问题

使用中发现alert,confirm 定位是获取整个body 高度居中定位,如果页面有滚动条会出现出窗定位太往下或向下。

修改了easyui 的min 的js

1.中顶部增加     var hg=($(window).height()/2)-120;

2.在 function _278(_279,_27a)  增加 opts.top=hg;

具体位置

opts.top=hg;

if(_27a){

_26f(_279);}

2. function _26f(_270,_271) 增加

//修改浮动属性

setTimeout(function(){

    $(".messager-window,.window-shadow,.window").css({"position":"fixed"});

   

},100);

 

2.Oracle存储过程 遇到的问题和解决方法

字符集程序和数据编码要保持一致

2.1编写存储过程

create orreplaceprocedure 存储过程名称(参数名称innumber,参数名称outnumber)

 Is

  --存储过程内部变量

变量名1 number:=1;

变量名2 number:=1;

begin

 

--存储过程业务

--存储过程业务语句 使用 “;”分号结尾,分号后必须换行

 commit;

end 存储过程名称;

 

2.2 存储过程 使用到的 功能

2.2.1循环一个数据集

 for 数据集变量in(select语句获取数据集)

   loop

--循环操作的业务

     end loop;

 如:

 for bkidl in (selectba_bkidfrom(

select  ba_bkid,count(1)baycountfrom book_borrowapply bay

inner join  book_makeappointment bmonbm.mp_bkid=bay.ba_bkidandbm.Mp_Status=0

wherebay.ba_status=2andBA_RDATETIME<=sysdategroupbybay.ba_bkid)  yqtbwherebaycount>maxjy)

   loop

      --修改图书状态

      update book_main setbk_status=10wherebk_id=bkidl.ba_bkid; 

   

     end loop;

2.2.2根据某字符分割字符串循环分割的数据

 

declareTag varchar(1000);

 spLength int:=0;

 BMIDs Varchar2(5000);--原字符,用某种符号分割的字符串

 spnext INT:=1;

 splitchar varchar(10);--分割的符号

 begin

 BMIDs :='2121$54$98$63';

 splitchar:='$';

     spLength :=(length(BMIDs)-length(replace(BMIDs,splitchar,''))+1);--计算分组后的长度

                            

                             whilespnext<=spLength

                             loop

                                      if(spnext=spLength)then--最后一次直接使用原字符

                                            Tag:=BMIDs;

                                       else

                                          Tag := substr(BMIDs,0,instr(BMIDs,splitchar)-1);--截取字符

                                          BMIDs:=replace(BMIDs,Tag||splitchar,'');--从元字符串中删除已经截取的字符串

                                         endif;

                                        

                                  dbms_output.put_line(Tag); 

                               

                                  spnext:=spnext+1;

                                 endloop;

end;

2.2.3存储过程返回数据集

返回数据集需要定义outsys_refcursor的变量

如:

create orreplaceprocedurebook_getyugh(yqbooklistoutsys_refcursor,ghbooklistoutsys_refcursor)is

begin

--提前两天提前逾期领书信息

openyqbooklist for select max(zhmc)zhmc,max(txt)txtfrom book_borrowapply bkr

                    inner joinxtgl_zhxx zx on zx.ryid=bkr.ba_userid

 where Ba_status=2andBA_RDATETIME<=sysdate+2groupbyzx.ryid;

 

 --提前五天开始提醒归还图书

 open ghbooklist for select max(zhmc)zhmc,max(txt)txtfrom Book_borrow bkr

                    inner joinxtgl_zhxx zx on zx.ryid=bkr.Br_userid

                    whereBr_status=0andBr_prereturntime<=sysdate+5groupbyzx.ryid;

 

 

endbook_getyugh;

 

2.2.4 项目中遇到的问题

  1)数据库时间类型数据,查询出来数据不是字符串

   解决方法:to_char(br_time,'YYYY-MM-DD HH24:mi:ss')

   (2)数据库当前时间sysdate

   (3)获取影响行数 rowback:=sql%rowcount;

  4)执行拼接的sql语句

 upxsql:='updatebook_borrowapply set ba_status=2,Ba_varuserid='||operuserid||',Ba_vertime=sysdate,Ba_rdatetime=(sysdate+'||yqmaxday||'),Ba_verremark='''||operremark||'''where ba_id in(select min(ba_id) from book_borrowapply where ba_bkid in('||bk_idlist||')group by ba_bkid)';

execute immediate  upxsql;--执行sql语句

(5) 逻辑控制语法

     If 条件 then

--符合条件

          Else

--不符合条件

   End if;

   (6) 批量插入数据的时候异常:此处不能使用序列

      此种情况必须再套用一个select才可以,是序列一个使用限制

       insert intoBook_borrowapply(Ba_id,Ba_userid,Ba_apptime,Ba_appremark,Ba_status,Ba_bkid,BA_MPID)

             selectbook_borrowapply_seq.nextval,a,b,c,d,e,ffrom(

             selectMp_userid a,sysdate b,'预约申请' c,0 d,Mp_bkide,mp_id ffromBook_makeappointment

             whereMp_bkid=bkidandMp_status=0andrownum<=maxbkjyorderbymp_id asc );

 7)创建索引

Asc,desc索引排序的方式

create index 索引名称on 表名(列名asc,列名 desc)

创建索引后可以在 PL/SQL 表-->编辑-->索引和Indexes 找到创建的索引

(8)update 语句中加入 case when 

update book_main setbk_status=casewhen1=1then2 else 3 end  where bk_status=5;

 

 

3.Javaee jsp网站开发中使用的问题

3.1页面网站目录问题

开发中和部署后的网站根目录会有所不同,需要用程序获取网站根目录

<%

String path = request.getContextPath();%>

<scripttype="text/javascript"src="<%=path%>/resource/js/jquery.min.js"></script>

<script type="text/javascript"src="<%=path%>/resource/js/jquery.easyui.min.js"></script>

3.2在页面上调用类文件

<%@pageimport="tsgl.common.MyDES"%>

就可以使用MyDES myd=newMyDES();

3.3获取配置文件信息  配置文件  booksetpro.properties 的配置数据

配置内容 rtxlog=C\:\\bookweb\\log

Getconfig(“rtxlog”);

//传入配置的key

    public Stringgetconfig(String key)throws IOException

    {

       String cpath= this.getClass().getResource("/").getPath();

       Properties pro=new Properties();

       FileInputStreamfileconfig= newFileInputStream(cpath+"booksetpro.properties");

       pro.load(fileconfig);

       String logpath=  pro.get(key).toString();

        return logpath;

    }

3.4创建一个类 网站启动时就执行,此类的生命周期和网站生命周期是一致的。

在 web.xml 增加

  <listener>

    <listener-class>tsgl.common.ContextListener</listener-class>

  </listener>

类中需要实现ServletContextListener

实例源码是做一个定时器,每天的10点去执行操作

public class ContextListener implementsServletContextListener  {

 

    private static Timer timer=null;

   

    private static String timeday="";//每天只执行一次,用来记录时间

   

    @Override

    public voidcontextDestroyed(ServletContextEvent event) {

        // TODO Auto-generated methodstub

        if(timer!=null)

        {

        timer.cancel();

        }

    }

 

//启动就执行方法

    @Override

    public voidcontextInitialized(ServletContextEvent event) {

       

    // TODO Auto-generatedmethod stub

            timer=new Timer(true);

                /**

         * 定时器到指定的时间时,执行某个操作(如某个类,或方法)

         */ 

        //后边最后一个参数代表监视器的监视周期,现在为一小时 

       

       

        timer.schedule(new MyTask(event.getServletContext()), 0, 60 * 60 *1000); 

   

       

    }

   

    public class MyTask extends TimerTask{

         /** 这个代表10点钟的时候执行任务 */ 

        private static final int C_SCHEDULE_HOUR = 10; 

        private   boolean isRunning = false

        public MyTask(ServletContextcontext) { 

            this.context = context; 

        }

        @Override

        public void run() {

                          Calendar cal =Calendar.getInstance(); 

                if (!isRunning) { 

                    if (C_SCHEDULE_HOUR ==cal.get(Calendar.HOUR_OF_DAY)&&!(ContextListener.timeday.equals(new SimpleDateFormat("yyyyMMdd").format(new Date())))) {

                    ContextListener.timeday=(new SimpleDateFormat("yyyyMMdd").format(new Date()));

                        isRunning =true

              

                     //执行的操作

         

                        isRunning =false

                      

                    } 

                }   

        }  

    }

}

3.5 struts2中控制器的配置

一个控制器有多个 action, struts.xml配置

<actionname="puboper_*"class="bk_pubAction"method="{1}"></action>

 

bk_pubAction 中有一个action 名字为 bkinfo

Url请求为 puboper_bkinfo.action  就进入 bkinfo。

.action 是web.xml struts2配置拦截器为 *.action  所以使用struts2  时需要后边带着.action

 

3.6 mybatis调用存储过程返回数据集

 resultMap是返回的数据集的个数据属性,使用中发现result 不用和返回的数据集必须一致,但是必须指定resultMap

 

parameterType参数类型是map,statementType="CALLABLE"使用存储过程必须定义此属性

<mappernamespace="sqlmap.book.jieyue">

<resultMaptype ="java.util.HashMap"id="cursorMapyqgh">

     <resultcolumn="ZHMC"property="ZHMC"/> 

     <resultcolumn="TXT"property="TXT"/>

</resultMap><selectid="bookyqghmeg"parameterType="map"statementType="CALLABLE">

{call book_getyugh(

     #{yqbooklist,jdbcType=CURSOR,mode=OUT,resultMap=cursorMapyqgh},

    #{ghbooklist,jdbcType=CURSOR,mode=OUT,resultMap=cursorMapyqgh}

    )}

</select>

</mapper>

 

java代码调用:

        publicList<List<Map<String, Object>>>getlsgh(){

                   

           

                List<List<Map<String,Object>>> llbk=new ArrayList<List<Map<String,Object>>>();

                 Map<String, Object> hm=new HashMap<String,Object>(); 

                   

                 hm.put("yqbooklist",new ArrayList<Map<String,Object>>());

                 hm.put("ghbooklist",new ArrayList<Map<String,Object>>());

                 this.session.selectOne("sqlmap.book.jieyue.bookyqghmeg",hm);

                 

                 List<Map<String, Object>>yqbooklist =(List<Map<String, Object>>)hm.get("yqbooklist");

                 List<Map<String, Object>>ghbooklist =(List<Map<String, Object>>)hm.get("ghbooklist");

                 llbk.add(yqbooklist);

                 llbk.add(ghbooklist);

                     return llbk;

                       

           

                }

 

3.6 mybatis如何使用 in()

   

普通赋值方法都是 #{map的key值},使用in的时候必须使用 ${map的key值},#会对数据进行处理放置,$ 我们传入的字符串为 1,2,3就会直接拼接上。

    <selectid="sendjieyuserinfo"resultType="map"parameterType="map">

select xx.txt,ba_statusfrom book_borrowapply ba

                inner join xtgl_zhxx xx onxx.ryid=ba.ba_userid

                where ba.ba_id in(${baid})group by xx.id,xx.txt,ba_status

</select>

 

3.7 struts2  无jsp页面返回 json 数据

 

<actionname="bkcommentjson"class="bk_pubAction"method="getbkcomjson"></action>

 

Java代码

 

 int    count=(Integer) hm.get("p_Outrecordcount");

           List<Map<String, Object>> list =(List<Map<String,Object>>)hm.get("bklist");

           JSONArray jay= new JSONArray().fromObject(list);

            HttpServletResponse res= getResponse();

           

            res.getWriter().write("{\"total\":"+count+",\"rows\":"+jay.toString()+"}");

0 0
原创粉丝点击