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];

     }

相關文章
相關標籤/搜索