zoukankan      html  css  js  c++  java
  • zk学习总结

    1. ZK Tree问题,当界面初始加载一个 Tree 控件时,有可能树型数据显示不全,就是被遮住一部分字。解决方法有两种:
      1>. 利用 <attribute>
      <tree xxxxx>
      <attribute name="onCreate">
      String cmd = "jQuery('.z-dottree').find('table').each(function(i) {jQuery(this).attr('style','');});";
      Clients.evalJavaScript(cmd); 
      </attribute>
      </tree>
      2>. 就是修改 zk 的包 zul.jar
      把 zul.jar/web/js/zul/sel/mold/ 下的 tree.js, tree.src.js 有 table-layout:fixed; 样式全都去掉. 
      ========================================
      因为table-layout:fixed会导致树型数据部门被遮住,所以要把这样去掉。上面那一种方法,在首次加载有效,但如果是树型控件可以输入条件查询,如果查出一个不存在的数据,树型被清空,再查询有数据的树型出来,树型控件会被重新加载,table-layout:fixed会被重新加载出来,所以得用第二种方法。

    2. ZK的上传控件 CKEditor 就是 FckEditor 
      一般ZK都已经内置了ckeditor,他的包是 ckez.jar
      首先要注意:如果页面上有布署了 jQuery脚本代码,应在head区域设置一句代码:
      var jQuery = window.jq; 
      不然会看不到编辑域,而只能看一个 textarea 文本域。
      配置:
      在项目根目录设置 CKEditor 文件夹;
      包含 config.jsp, config.js, upload.jsp ;
      如果不需要传入自定义的参数给 upload.jsp使用,config.jsp就可以不用. 这里 config.jsp与config.js 是一样的文件,就是.jsp文件,可以接收从页面传来的数据,由于zk在加载ckeditor是异步的,而zk加载异步又与普通的web异步不太一样...
      就是如果你写 window.onload或是$(document|window).ready 都有可能zk还没加载完。

      config.jsp代码:
      01 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      02     contentType="text/javascript;charset=UTF-8"%>
      03   
      04 <%
      05     String xxId = request.getParameter("mID");
      06 %>
      07 Array.prototype.contain = function(itm) {
      08     if (this.length == 0)
      09         return false;
      10       
      11     for (m in this) {
      12         if (this[m] == itm)
      13             return true;
      14     }
      15       
      16     return false;
      17 }
      18   
      19 Array.prototype.remove = function(itm) {
      20     if (this.contain(itm)) {
      21         for (m in this) {
      22             if (this[m] == itm) {
      23                 this.splice(m, 1)
      24             }
      25         }
      26     }
      27 }
      28   
      29 CKEDITOR.editorConfig = function( config )
      30 {
      31     config.language = 'zh-CN';
      32     //config.uiColor = '#AADC6E';
      33     //alert(config.toolbar_Basic instanceof Object);
      34       
      35     var menus = config.toolbar_Basic[0];
      36       
      37     if (!menus.contain('Image')) {
      38         menus.push('Image');
      39     }
      40       
      41     if (!menus.contain('Source')) {
      42         menus.push('Source');
      43     }
      44       
      45     if (!menus.contain('Undo')) {
      46         menus.push('Undo');
      47     }
      48       
      49     if (!menus.contain('Redo')) {
      50         menus.push('Redo');
      51     }
      52       
      53     menus.remove('About');
      54       
      55     config.toolbar = 'Basic';
      56       
      57     var __theXXid = '<%=xxId%>';
      58     //图片处理  
      59     config.pasteFromWordRemoveStyles = true;   //setFilebrowserImageBrowseUrl
      60     config.filebrowserImageUploadUrl = "/projectName/ckeditor/uploader?Type=Image&xxId=" + __theXXid;  
      61       
      62     // 去掉ckeditor“保存”按钮  
      63     config.removePlugins = 'save'
      64     return;
      65     for (itm in config) {
      66         //if (itm.indexOf('plug') >= 0) {
      67             alert(itm);
      68         //}
      69     }
      70 };
      71   
      72 config.js代码 其实与 config.js下面的脚本一样...
      73 upload.jsp好像没啥用,里面放空也行.
      74   
      75 ------------------------------------
      76   
      77 在web.xml新建 ckeditor servlet 节点; <SPAN style="FONT-FAMILY: 'sans serif', tahoma, verdana, helvetica; WHITE-SPACE: normal" class=Apple-style-span> <servlet></SPAN><SPAN style="FONT-FAMILY: ''sans serif', tahoma, verdana, helvetica'" class=Apple-style-span><SPAN style="WHITE-SPACE: nowrap" class=Apple-style-span> </SPAN></SPAN>
      <servlet-name>CKUpload</servlet-name>
      <servlet-class>ishitong.mpsmp.web.util.CKEditorUploadServlet</servlet-class>
      <init-param>
      <param-name>baseDir</param-name>
      <param-value>/upload/pushimgs/</param-value>
      </init-param>
      <init-param>
      <param-name>debug</param-name>
      <param-value>false</param-value>
      </init-param>
      <init-param>
      <param-name>enabled</param-name>
      <param-value>true</param-value>
      </init-param>
      <init-param>
      <param-name>AllowedExtensionsFile</param-name>
      <param-value></param-value>
      </init-param>
      <init-param>
      <param-name>DeniedExtensionsFile</param-name>
      <param-value>
      html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|ftl
      </param-value>
      </init-param>
      <init-param>
      <param-name>AllowedExtensionsImage</param-name>
      <param-value>jpg|gif|jpeg|png|bmp</param-value>
      </init-param>
      <init-param>
      <param-name>DeniedExtensionsImage</param-name>
      <param-value></param-value>
      </init-param>
      <init-param>
      <param-name>AllowedExtensionsFlash</param-name>
      <param-value>swf|fla</param-value>
      </init-param>
      <init-param>
      <param-name>DeniedExtensionsFlash</param-name>
      <param-value></param-value>
      </init-param>
      <load-on-startup>0</load-on-startup>
      </servlet>
      <servlet-mapping>
      <servlet-name>CKUpload</servlet-name>
      <url-pattern>/ckeditor/uploader</url-pattern>
      </servlet-mapping>

      在zk.xml处配置:

      <language-config>
             <addon-uri>/WEB-INF/ckez-bind-addon.xml</addon-uri>
      </language-config>

      要让CKEditor可上传,就要设置 setFileBrowse这样的属性节点...
      setFilebrowserBrowseUrl 配置上传文件夹位置
      setCustomConfigurationsPath 设置 CKeditor 客户端脚本配置文件. 如:
      FckID.setCustomConfigurationsPath = "/ckeditor/config.jsp?自定义参数名=xxxxx";

    3. Configuration config =       desktop.getWebApp().getConfiguration(); 
      config.setMaxUploadSize( 102400 ); // 单位 KB ,如果为负则不限制大小

    4. zk 使用 mybatis 中用 in 操作查询.
      Map map = new HashMap<String, Object>();
      List list = new ArrayList<String>();
      list.add("1");
      list.add("2");
      list.add("3");
      ...
      map.put("allKeys", list);
      Mybatis 部分:
      <delete id="DeleteTableDatas" parameterType="java.util.HashMap" flushCache="true">
      delete from xxtbl where 
      <foreach collection="allKeys" index="mIndex" item="mItem" open=" KEYID=" separator=" or KEYID=" close="">
           #{mItem,javaType=String,jdbcType=VARCHAR}
      </foreach>
      </delete>

    5. zk使用 Mybatis 调用存储过程:
      <select id="MybatisUseProcedures" parameterType="java.util.HashMap" resultType="hashmap" statementType="CALLABLE" flushCache="true" useCache="false" >
      {
      call prod_Name(
      #{MULLXIDS,mode=IN,jdbcType=VARCHAR,javaType=String},
      ...
      )
      }
      如果是小数据,又不常用的存储过程,要使用游标的话,可以这样:
      注意不能使用缓存;
      反回的表数据所包含的字段,应在 resultMap 有存在。
      call prod_Name(
      #{C_SQL,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=resultMap_Id}
      )
      由mybatis没有关闭游标操作,如果没关闭,oracle中的池会被占满,而出现访问异常的问题,所以尽量少使用游标。

    6. zk使用存储过程后调用在存过中生成的临时表.
      调用存储过程跟上面 第 5 一样.

      调用存储过程中生成的临时表,就是用Session再调用一次 select * from 临时表的 mybatis段。
      因为临时表是在一个会话区间存在的,所以不用担心用户太多而产生抢占或更改别的用户数据的问题。
    7. 相关文件下载
      CKEditorUploadServlet (web.xml配置的上传类)
      ckeditoruploadservlet.rar
    8. ZK上传方法.
      在页面布署一个 button按钮 
      <button id="xxx" label="按钮名称" upload="true" />
      后台
      public void onUpload$xxx(ForwardEvent event) {
              UploadEvent oData = (UploadEvent) event.getOrigin();
              Media media = oData.getMedia();
              String fileName = media.getName();

              boolean isb = media.isBinary();
              if (isb) { //假如是 Binary 文件
                  flen = media.getByteData().length; //就用这样的方式读取文件大小
              } else {
                  flen = media.getStringData().length(); //否则直接读取内容文本大小.
              }
              
              if (!fileName.equals("")) {
                  String path = new ThreadLocal<HttpSession>().get().getServletContext().getRealPath("/upload/xxx/");
                  boolean flag = UsualUtil.createFile(media.getByteData(), path,fileName);

                  if (flag) {
                      //上传成功.
                  }
              }
      }

    9. Listbox 与 Listitem
      前者的 addEventListener ("xxx", new EventListener() {}); 有onSelect 后者是 onClick;

    10. Listbox的添加与删除.
      假设 Listitem 实体为 HashMap
      List<HashMap<String, Object>> nlist = new ArrayList<HashMap<String, Object>>();
      List<Listitem> lists = ListboxId.getItems();
      for (Listitem itm : lists) {
              if (!itm.isSelected()) {
                  cell = (Listcell) itm.getChildren().get(1);
                  String col1 = cell.getLabel();
                  .......
                  .......
                  Map map = new HashMap<String, Object>();
                  map.put("key1", col1);
                  ....
                  ...
                  nlist.add(map);
              }
      }
      ListModelList nmdl = new ListModelList(nlist);
      ListboxId.setModel(nmdl);
      以上的删除,
      添加的话是其他的Listitem或其他类型数据转化为 List<HashMap<String, Object>>();
      都要进行 SetModel 不然会发生错误。

    11. ZK事件方法为 :
      public void onType$ComponentId(ForwardEvent event) {};

    12. ZK执行事件方法的语句:
      javascript:zAu.send(new zk.Event(zk.Widget.$(jq('$ComponentId')), 'MethodName',['参数1','参数2',...]));

      public void MethodName$ComponentId(ForwardEvent event){
          Object[] oData = (Object[]) e.getOrigin().getData();
          String 参数1= oData[0].toString();
          String 参数2= oData[1].toString();
          ...
      };

    13. 相关下载
      UsualUtil.java usualutil.rar 布局:
      http://wenku.baidu.com/view/49e52ca6b0717fd5360cdc27.html (布局)
  • 相关阅读:
    遗产
    (OK) C/S—心跳检测—heartbeat
    如何判断SOCKET已经断开
    accept() returns the same socket descriptor
    C/S—心跳检测—heartbeat
    Linux—Network—Socket—Programming—heartbeat—源代码
    CentOS 7
    yum—repo—yum源
    (OK) CentOS7—mp4—avi—视频播放—SMPlayer
    读史
  • 原文地址:https://www.cnblogs.com/feifeihu/p/3009695.html
Copyright © 2011-2022 走看看