bos问题总结

1.前台页面相关

1.1 弹出框越界

解决方法: 导入js文件(outOfBounds.js)java

1.2 获取datagrid的选中行

解决方法:node

       //获取全部被选中的记录spring

       var e = $("#grid").datagrid("getSelections");数据库

 

       //获取单行被选中的记录json

       var e = $("#grid").datagrid("getSelected");api

1.3 动态控制datagrid的编辑状态

解决方法:数组

       //设置id列能够编辑浏览器

       var e = $("#grid").datagrid("getColumnOption","id");app

       e.editor.type='validatebox';框架

       e.editor.options ={required : true};

 

       //设置id列不能够编辑

       var e = $("#grid").datagrid("getColumnOption","id");

       e.editor.type=null;

1.4 将表单参数序列化

解决方法:

       //获取要提交的form对象,调用全局函数serializeJson

       var p = $("#searchForm").serializeJson();

 

       $.fn.serializeJson=function(){ 

        var serializeObj={}; 

        var array=this.serializeArray();

        $(array).each(function(){ 

            if(serializeObj[this.name]){ 

                if($.isArray(serializeObj[this.name])){ 

                    serializeObj[this.name].push(this.value); 

                }else{ 

                    serializeObj[this.name]=[serializeObj[this.name],this.value]; 

                } 

            }else{ 

                serializeObj[this.name]=this.value;  

            } 

        }); 

        return serializeObj; 

    };

1.5 文件下载中文件名文乱码问题

解决方法:

              //获取请求头中的浏览器类型

              String agent = ServletActionContext.getRequest().getHeader("User-Agent");

             

              //工具类,按照不一样的浏览器,作不一样的编码处理

              public static String encodeDownloadFilename(String filename, String agent)

                            throws IOException {

                     if (agent.contains("Firefox")) { // 火狐浏览器

                            filename = "=?UTF-8?B?"

                                          + new BASE64Encoder().encode(filename.getBytes("utf-8"))

                                          + "?=";

                            filename = filename.replaceAll("\r\n", "");

                     } else { // IE及其余浏览器

                            filename = URLEncoder.encode(filename, "utf-8");

                            filename = filename.replace("+"," ");

                     }

                     return filename;

              }

 

1.6 id为空字符串被封装成id为””的对象

解决方法:

       //判断对象id是否为空

       if(obj != null && StringUtils.isNotBlank(obj.getId())){

              … …

       }

1.7 设置ztree能够被选中

var setting = {

                     data : {

                            key : {

                                   title : "t"

                            },

                            simpleData : {

                                   enable : true

                            }

                     },

                     check : {

                            enable : true }

                     }

1.8 获取ztree中被选中的项

ztree中显示的复选框,本质上只是一个span,要想获取其表明的id,只能调用api

              //获取zTree对象

              var treeObj = $.fn.zTree.getZTreeObj("functionTree"); // functionTree 是ztree的id

              //获取当前树中被选中项的集合

              var nodes = treeObj.getCheckedNodes(true);

 

1.9 为多选框动态添加数据

避免每访问一次就添加一次数据,必定要在添加以前清空

$.post(url_noassociation,{},function(data){

       $("#noassociationSelect").empty();   //清空原先的数据

       for(var i = 0; i<data.length; i++){

       $("#noassociationSelect").append(

                            "<option value='"+data[i].id+"'>"+data[i].name+"</option>");

              }

       });

1.10 将多选框中选中的选项添加到另外一个多选框中

<select id="noassociationSelect" multiple="multiple" size="10"></select>

<select id="associationSelect" name="customerIds" multiple="multiple" size="10"></select>

 

为按钮添加事件:

$(function(){

       $("#toRight").click(function(){                                                       

              $("#associationSelect").append($("#noassociationSelect option:selected"));

       });

       $("#toLeft").click(function(){

              $("#noassociationSelect").append($("#associationSelect option:selected"));

       });

});


1.11 动态调用action的方法

1.12 路径正确,取不到值

检查字段名大小写拼写是否正确

 

1.13 实现上传功能

使用ocupload.js的upload方法

       $(function(){

              $("#button-import").upload({      //调用该方法,前提是导入ocupload的js文件

                     action:'${pageContext.request.contextPath}/regionAction_importBatch.action',

                     name:'myFile',

                     onComplete:function(data){

                            if(data == "0"){

                                   $.messager.alert("提示信息","区域数据导入失败!","warning");

                            }else{

                                   $.messager.alert("提示信息","区域数据导入成功!","info");

                            }

                     }

              });

       });

 

1.14 查看流程进度图

1. 首先根据任务的id能够获得任务相关的信息

2. 根据任务对象找到流程定义对象,获取流程定义的实体对象, 获取流程实例的进度id

3. 根据流程定义的实体对象, 获取当前所在步骤的activity对象

4. 根据activity对象,获取图片的宽高,及起点的纵横坐标

      

       public String showPng(){

              //根据流程实例id获取流程实例对象

              ProcessInstance processInstance =

              runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult();

              //根据流程对象获取流程定义id

              String definitionId = processInstance.getProcessDefinitionId();

              //根据流程对象获取流程实例的进度id

              String activityId = processInstance.getActivityId();

              //根据流程定义id,获取流程定义对象

              ProcessDefinition processDefinition =

repositoryService.createProcessDefinitionQuery().processDefinitionId(definitionId).singleResult();

              //根据流程定义对象获取流程的发布id

              String deploymentId = processDefinition.getDeploymentId();

              //根据流程定义对象获取 图表 的名字

              String pngName = processDefinition.getDiagramResourceName();

              //根据流程定义id,获取流程定义的实体对象

              ProcessDefinitionEntity definition = (ProcessDefinitionEntity)

repositoryService.getProcessDefinition(definitionId);

              ActivityImpl activity = definition.findActivity(activityId);

             

              //获取坐标及宽高

              int height = activity.getHeight();

              int width = activity.getWidth();

              int x = activity.getX();

              int y = activity.getY();

             

              //将部署id,任务id,及坐标宽高等信息,放入map,压入值栈

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

              map.put("deploymentId", deploymentId);

              map.put("pngName",pngName );

              map.put("x",x );

              map.put("y",y );

              map.put("width", width);

              map.put("height",height );

             

              ActionContext.getContext().getValueStack().push(map);

              return "showPng";

       }

 

 

5. 跳转到展现图片的页面,动态展现图片

       <!-- 1.获取到规则流程图, 发送请求到action中,动态展现流程图 -->

<img style="position: absolute;top: 0px;left: 0px;"

src="processInstanceAction_viewImage?deploymentId=${deploymentId}&pngName=${pngName}">

 

<!-- 2.根据当前活动的坐标,动态绘制DIV -->

<div style="position: absolute;

       border:1px solid red;top:${y-1}px;left:${x-1}px;width:${width}px;height:${height}px;">

</div>

 

6. 为流程图准备数据

       public String viewImage(){

              InputStream inputStream =

                     repositoryService.getResourceAsStream(deploymentId, pngName);

              ActionContext.getContext().getValueStack().set("pngStream",inputStream );

              return "viewImage";

       }

7.在struts.xml中,设置返回数据为数据流

       <result name="viewImage" type="stream">

              <param name="contentType">image/png</param>

              <param name="inputName">pngStream</param>

       </result>

2.ssh相关

2.1 注解注入

       action注解式Controller,必定及得是多例多例!!!

       @Scope(“prototype“)

2.2 启用shiro框架,方法未找到的问题

解决方法:

       因为shiro框架,是基于代理的.cglib是基于子类继承父类实现的

       而BaseAction中,泛型是调用BaseAction的类的class,没有考虑到代理状况,所以,要完善构造方法

      

       //构造方法,为model初始化值

       public BaseAction(){

              ParameterizedType superclass = null;

              //判断的父类是不是含参的类

              if(this.getClass().getGenericSuperclass() instanceof ParameterizedType){

                     superclass = (ParameterizedType) this.getClass().getGenericSuperclass();

              }else{

                     //不是含有参数泛型的类,再找一次父类

                     superclass =

                            (ParameterizedType) this.getClass().getSuperclass().getGenericSuperclass();

              }

              Type[] arguments = superclass.getActualTypeArguments();

              Class<T> entityClass = (Class<T>) arguments[0];

              detachedCriteria = DetachedCriteria.forClass(entityClass);

              pageBean.setDetachedCriteria(detachedCriteria);

              try {

                     model = entityClass.newInstance();

              } catch (InstantiationException e) {

                     e.printStackTrace();

              } catch (IllegalAccessException e) {

                     e.printStackTrace();

              }

       }

2.3 Service层及Dao层注解

       业务层及持久层的注解要加在实现类上!!!!

2.4 由数据库中的表自动建立类

解决方法: 使用hibernate的翻转功能

具体步骤:

       1. 打开myeclipse

       2. 切换到Hibernate视图


       3. 在下图中,右键,点击新建(new)

       4. 弹出设置窗口,作如下设置


       5. 双击 mybos,会出现如下效果

       6. 切换到javaee视图

              建立一个普通java project便可

              右键====>>myeclipse====>> add hibernate capabilities

       7. 修改hibernate框架的相关设置便可

              注意,要修改表对应的类名时,要写全类名

成功后,项目的图表会有一个hibernate的框架标识...

8. 调整到hibernate视图,进行操做

    选择相应数据库中的相应表,右键====>> hibernate reverse engineering

下一步(默认就好):

下一步:

OK!!

2.5 hissence

将crm(客户关系管理)系统中的customer文件及service文件拷贝到本身的系统下

       注意:必定要保证customer在本地系统的路径与crm系统中的路径一致

配置applicationContext.xml文件

       <!-- 注册远程服务的代理工厂 -->

       <bean id="customerService"

              class="org.springframework.remoting.caucho.HessianProxyFactoryBean">

              <!-- 注入接口类型,针对接口建立对象 -->

              <property name="serviceInterface"

                     value="cn.xiaoge.crm.service.CustomerService"></property>

              <!-- 服务的访问地址 -->

              <property name="serviceUrl"

                     value="http://localhost:8080/crm/remoting/customer"></property>

       </bean>

 

2.6 数据封装问题

       当model会封装全部前台请求数据中与其字段匹配的数据

3.数据库相关

3.1 多表联查,结果的封装问题

               //设置此项,将结果封装到根实体中

               criteria.setResultTransformer(DetachedCriteria.ROOT_ENTITY);

3.2 多表查询结果转json,死循环

              //利用jsonconfig排除干扰项

              JsonConfig jsonConfig = new JsonConfig();

              jsonConfig.setExcludes(excludes);    //excludes是字符串数组类型

              //进行转换

              String json = JSONObject.fromObject(obj, jsonConfig).toString(); //转换对象

    或:   String json = JSONArray.fromObject(list, jsonConfig).toString();  //转换数组

3.3 封装BaseDao时,泛型处理,

       private Class<T> entityClass;   //准备class类型的属性,用于接收泛型的真实类型

       //在构造函数中,获取调用BaseDao的实体类的class

       public BaseDaoImpl(){

              //获取调用该 dao 的实体

              ParameterizedType superClass =

                     (ParameterizedType) this.getClass().getGenericSuperclass();

              Type[] arguments = superClass.getActualTypeArguments();

              entityClass = (Class<T>) arguments[0];

     }

相关文章
相关标签/搜索