‘编程学习’ 分类下的所有文章
2010七月29

buffalo ajax 实现表单提交

前台代码

<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gbk">
    <title>test</title>
    <LINK href="/wi/css/oa/blue/menu.css" type=text/css media=screen rel=stylesheet>
    <script language="javascript" src="/wi/script/prototype.js"></script>
    <script language="javascript" src="/wi/script/buffalo.js"></script>

</head>
<script language="javascript">
    var endPointTop = '/wi/buffalo';
    var waitingImg = '/wi/images/oa/loading.gif';
    var loadingImg = '/wi/images/oa/loading.gif';
    var userId = 'superadmin';
    var deptId = '0001';
    function test() {
        try {
            var user = Buffalo.Form.formToBean("form1", "modules.sys.Sys_user", true);

            var buffalo = new Buffalo(endPointTop);
            buffalo.remoteCall("desktopService.test", [userId,user], function(reply) {
                var str = reply.getResult();
                alert(str);
            });
        } catch (ex) {
           //   alert(ex);
        }
    }
</script>
<body style="margin: 0; padding: 0; overflow: auto; " marginwidth="0" topmargin="0" leftmargin="0" marginheight="0">
<a href="#" onclick="test();">test</a>

<form id ="form1">

  <p>id:<input name="id" type="text" id="id">

  name:<input name="name" type="text" id="name">

  age: <input name="age" type="text" id="age">

 memo: <input name="memo" type="text" id="memo">

  </p>

</form>

</body>
</html>

后台bean

public class User {

    private int id;

    private String name;

    private int age;

    private String memo;

    public User() {

    }
    //结合数据库操作可以添加 rs.getString 、get、set 方法
}

执行类

public class desktopService {
    public int test(String userId, Sys_user obj) {

        return 1;
    }
}

buffalo缺点

实测过程中发现,buffalo实现form表单元素绑定是一对一的,form里包含多余的元素会报错。

2010七月27

buffalo+list+ul+li 实现Ajax多级菜单

Buffalo ajax使用说明

源代码

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>LeftMenu</title>
<LINK href="css/menu.css" type=text/css  media=screen rel=stylesheet>
<script language="javascript" src="script/prototype.js"></script>
<script language="javascript" src="script/buffalo.js"></script>
</head>
<script language="javascript">
    var endPointTop = '/${globals_sys_basename}/buffalo';//globals_sys_basename应用根目录
    var waitingImg = '/${globals_sys_basename}/images/oa/loading.gif';
    var loadingImg = '/${globals_sys_basename}/images/oa/loading.gif';
    var userId = '$!{user.getLoginname()}';
    var deptId = '$!{user.getUnitid()}';
    var alreadyOpenTableId = null;
    var hrefBaseValue = null;
     //HTTP://WWW.WIZZER.CN
     function getUl(e) {
        for (var i = 0; i < e.childNodes.length; i ++) {
            if (e.childNodes[i].nodeName.toUpperCase() == "UL")return true;
        }
        return false;
    }
    function subMenu(e, menuId) {//动态增加下级菜单
        if (getUl(e))return;
        try {
            var buffalo = new Buffalo(endPointTop);
            buffalo.remoteCall("desktopService.getSubMenu", [userId,menuId], function(reply) {
            //desktopService.getSubMenu ajax调用后台方法,传递用户名、一级栏目ID
                var str = reply.getResult();//返回ArrayList对象或List对象
                if (str.length>0) {
                    var ulElem = document.createElement("ul");

                    var temp = "";
                    ulElem.className = "MenuLevel2";
                    ulElem.ID = "MENU_" + menuId + "S";
                    ulElem.style.display = "";
                    for (var i = 0; i < str.length; i++) {
                        temp += "<li id='MENU_"+str[i].id+"' class='level2' onclick=\"subMenu(this,'" + str[i].id + "');menuClick(this);\" ><div>";
                        if (str[i].ext3 != null && str[i].ext3 != "") {
                            temp += "<img src='/$!globals_sys_basename/private/Icons/" + str[i].ext3 + "'>";//小图标
                        }
                        temp += "" + str[i].name + "</div></li>";
                    }
                    ulElem.innerHTML = temp;
                    e.appendChild(ulElem);
                }
            });
        } catch (ex) {
        }

    }

    function closeMenu() {
        if (alreadyOpenTableId == null) return;
        alreadyOpenTable = document.all(alreadyOpenTableId);
        if (alreadyOpenTable.childNodes.length > 1){
            targetTable = alreadyOpenTable.childNodes[1];
        }else{return;}
        targetTable.style.display = "none";
        alreadyOpenTableId = null;
    }
    function menuClick(e) {
        var currentTableSrc = e;
        if (currentTableSrc.id != alreadyOpenTableId && currentTableSrc.id!=alreadyOpenTableId+"0001") closeMenu();

        targetTableId = currentTableSrc.id + "S";
        if (e.childNodes.length > 1){
            targetTable = e.childNodes[1];
        }else{targetTable=null;}
        if (targetTable == null)return;
        if (targetTable.style.display == "none") {
            targetTable.style.display = '';
            alreadyOpenTableId = currentTableSrc.id;
        } else {
            targetTable.style.display = "none";
        }
    }
 </script>
<body style="margin: 0; padding: 0; overflow: auto; " marginwidth="0" topmargin="0" leftmargin="0" marginheight="0">

    <ul id=MenuUl>

      #foreach($obj in $list)//使用模板语言循环出第一级菜单

    <li  id="MENU_$!{obj.getId()}" onclick="subMenu(this,'$!{obj.getId()}');menuClick(this);"><div>#if(${obj.getExt3()})<img src="/$!globals_sys_basename/private/Icons/$!{obj.ext3}">#end $!{obj.getName()}</div>

    </li>

    #end
        </ul>

</body>
</html>

menu.css样式表 

body {
	background: #d8edfc;
	font-size: 12px;
	font-family: 宋体;
	scrollbar-base-color: #dbecf8;
	scrollbar-arrow-color: #2a8ed1;
	scrollbar-track-color: #bdddf2;
	scrollbar-3dlight-color: #2886c5;
	scrollbar-darkshadow-color: #2886c5;
	scrollbar-face-color: #dbecf8;
	scrollbar-shadow-color: #dbecf8;
	margin: 1px;
	border: 3px solid #4891c6;
}


#MenuUl {
	list-style:none;
	margin: 0px;
	padding: 0px;
	background: #d8ebf7;
}

ul.MenuLevel2 {
	list-style:none;
	margin: 0px;
	padding: 0px;
	background: #d8ebf7;
}

.level1 {
	font-weight: bold;
	color: #005790;
	padding-bottom: 1px;

}

.level2 {
	font-weight: normal;
	color: #005790;
}

.level3Head {
	font-weight: normal;
	color: #2479b6;
	width: 100%;
	height: 21px;
	padding-left: 61px;
	padding-top: 4px;
	background: url(images/menu_bg_head.gif) no-repeat;
	cursor: hand;
}

.level33 {
	font-weight: normal;
	color: #2479b6;
	width: 100%;
	height: 21px;
	padding-left: 61px;
	padding-top: 4px;
	background: url(images/menu_bg_3.gif) no-repeat;
	cursor: hand;
}

.level32 {
	font-weight: normal;
	color: #2479b6;
	width: 100%;
	height: 21px;
	padding-left: 61px;
	padding-top: 4px;
	background: url(images/menu_bg_2.gif) no-repeat;
	cursor: hand;
}

.level1Style {
    /*font-size:18px;  */
	width: 155px;
	height: 24px;
	background: url(images/menu_btn_bg.gif) no-repeat;
	padding-left: 20px;
	padding-top: 4px;
	cursor: hand;
}

.level1SelectedStyle {
	width: 155px;
	height: 24px;
	background: url(images/menu_btn_bg_selected.gif) no-repeat;
	padding-left: 20px;
	padding-top: 4px;
	cursor: hand;
}

.level2Style {
	width: 100%;
	height: 20px;
	background: #8ec4e9;
	padding-left: 30px;
	padding-top: 4px;
	border-top: 1px solid #eff6fb;
	cursor: hand;
}
2010七月24

完美支持中文wp-cumulus标签云插件源码(无锯齿无抖动7K大小)

1、首先安装wp-cumulus 标签Tag Cloud插件

这个不用教了吧?:)啰嗦一下:

参数:

wp_tag_cloud parameters:smallest=8&largest=22&number=45

设置最小字体、最大字体、总数量

应用:

若网站主题不能自动支持,可以手动编辑php文件,加入 <?php wp_cumulus_insert(); ?> 代码。

2、使用说明

鼠标右击下面链接,选择“另存为”(仅7K大小,效果见本站首页右下):

/wp-content/plugins/wp-cumulus/tagcloud.swf

上传替换网站 /wp-content/plugins/wp-cumulus/ 下tagcloud.swf文件,即可完美支持中文。

——以下是开发者阅读,普通用户可以略过————————————————————

3、修改wp-cumulus源代码

安装Adobe Flash CS4 后打开wp-cumulus源文件,按照上图步骤,选择“tag”文本框,不嵌入字符。

4、修改Tag.as

打开  C:\wp-cumulus\flash sources\com\roytanck\wpcumulus\Tag.as

源代码:

package com.roytanck.wpcumulus
{

	import flash.geom.ColorTransform;
	import flash.filters.*;
	import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        import flash.text.*;
	public class Tag extends Sprite {

		private var _back:Sprite;
		private var _node:XML;
		private var _cx:Number;
		private var _cy:Number;
		private var _cz:Number;
		private var _color:Number;
		private var _hicolor:Number;
		private var _active:Boolean;
		private var _tf:TextField;

		public function Tag( node:XML, color:Number, hicolor:Number ){
			            _node = node;
            _color = color;
            _hicolor = hicolor;
            _active = false;
            _tf = new TextField();
            _tf.autoSize = TextFieldAutoSize.LEFT;
            _tf.selectable = false;
            _tf.antiAliasType = AntiAliasType.ADVANCED;
	    var format:TextFormat = new TextFormat();
            format.font = "微软雅黑, Arial, 黑体";//设置字体
            format.bold = true;
            format.color = color;
            format.size = 16 * getNumberFromString(node["@style"]);
            _tf.defaultTextFormat = format;
	    //_tf.embedFonts = true;  //是否使用字符库,这个肯定要注释掉
            _tf.text = node;
            var _loc_5:BlurFilter = new BlurFilter(5, 5, 1);
            _tf.filters = [_loc_5];
	    var _loc_6:Bitmap = new Bitmap(null, "auto", true);
            var _loc_7:BitmapData = new BitmapData(_tf.width, _tf.height, true, color);

            _loc_7.draw(_tf);
            _loc_6.bitmapData = _loc_7;
            _loc_6.scaleY = 0.15;
            _loc_6.scaleX = 0.15;

            addChild(_loc_6);
            _loc_6.x = (-this.width) / 2;
            _loc_6.y = (-this.height) / 2;
            _back = new Sprite();
            _back.graphics.beginFill(_hicolor, 0);
            _back.graphics.lineStyle(0.6, _hicolor);
            _back.graphics.drawRect(0, 0, _loc_6.width, _loc_6.height);
            _back.graphics.endFill();
            addChildAt(_back, 0);
            _back.x = (-_loc_6.width) / 2;
            _back.y = (-_loc_6.height) / 2;
            _back.visible = false;
			if( _node["@href"].substr(0,4).toLowerCase() == "http" ){
				this.mouseChildren = false;
				this.buttonMode = true;
				this.useHandCursor = true;
				this.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
				this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
				this.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
			}
		}

		private function mouseOverHandler( e:MouseEvent ):void {
			_back.visible = true;
			_tf.textColor = _hicolor;
			_active = true;
		}

		private function mouseOutHandler( e:MouseEvent ):void {
			_back.visible = false;
			_tf.textColor = _color;
			_active = false;
		}

		private function mouseUpHandler( e:MouseEvent ):void {
			var request:URLRequest = new URLRequest( _node["@href"] );
			var target:String = _node["@target"] == undefined ? "_self" : _node["@target"];
			navigateToURL( request, target );
		}

		private function getNumberFromString( s:String ):Number {
			return( Number( s.match( /(\d|\.|\,)/g ).join("").split(",").join(".") ) );
		}

		public function set cx( n:Number ){ _cx = n }
		public function get cx():Number { return _cx; }
		public function set cy( n:Number ){ _cy = n }
		public function get cy():Number { return _cy; }
		public function set cz( n:Number ){ _cz = n }
		public function get cz():Number { return _cz; }
		public function get active():Boolean { return _active; }

	}

}

5、源代码下载

由于本空间不支持rar文件,所以有兴趣的可以到我的CSDN地址下载:

http://download.csdn.net/source/2571076

6、说明

花了一天的时间,查找了许多资料,先是官方的不支持中文,后来找到方法支持中文但是有抖动的现象,效果不好,再后来找到无抖动的swf文件,但是不开源,于是自己琢磨。。

请保留本站链接,咱都不收费而且开源了,是吧?。。呵呵

把一些注释、空格、再优化下代码,swf文件还可以压缩,这个需要你自己尝试了。。。

2010七月22

在移植不同JS框架遇到报错的问题

一般是 $ 函数冲突造成的,例如:

function $() {
  var results = [], element;
  for (var i = 0; i < arguments.length; i++) {
    element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    results.push(Element.extend(element));
  }
  return results.reduce();
}

 和

var $ = function (id) {
	return "string" == typeof id ? document.getElementById(id) : id;
};

function $(ele) {
  if (typeof(ele) == 'string'){
    ele = document.getElementById(ele)
    if(!ele){
  		return null;
    }
  }
  if(ele){
  	Core.attachMethod(ele);
	}
  return ele;
}

等。。。。找出问题费了一定功夫。。:(

2010七月20

分享本站WordPress插件(代码高亮插件等)

为了方便大家阅读本站分享的代码,特安装了代码高亮显示插件。

1、Auto SyntaxHighlighter

用于可视化编辑时插入代码

2、Syntax Highlighter and Code Prettifier Plugin for WordPress

用于页面显示。

——————————————————————————–

另外分享本站 安装的Wordpress插件经验。对一般的站点应该比较全,够用了吧?:)

1、Akismet     防止垃圾评论的插件,需要到官网注册key

2、Auto SyntaxHighlighter    代码高亮–可视化编辑插件(后台)

3、Syntax Highlighter and Code Prettifier Plugin for WordPress   代码高亮显示插件(前台)

4、NO Revisions  禁止Wordpress版本控制功能,实现文章编号的连续,节省KEY资源

5、Some Chinese Please!   评论必须包含中文插件

6、Watermark RELOADED   上传图片自动加水印插件

7、WP-Mail-SMTP   使用免费邮箱作为网站邮件服务器插件,教程:/?p=297

 8、Auto_Save_Image   自动保存远程图片插件,并可设置去掉图片链接,自动添加水印

9、WP-PostViews   文章阅读统计插件(前台)

10、PostViews for Admin  后台显示文章统计数(后台)

11、WP-cumulus  非常炫的3D标签云插件,完美支持中文:/?p=482

12、其他:分享插件、防评论中的链接被百度搜集插件等。

2010七月19

WordPress 上传图片功能异常,导致上传没反应

WordPress 2.9.2 版本~安装了不知道啥插件,上传图片功能异常,导致上传没反应。

可能是Super Image Plugin Tools版本太低造成的?

替换一些原文件还是不能正常使用,于是升级到了Wordpress 3.0~ 搞定。

简体中文版下载地址:http://wfans.org/blog/2010/06/wordpress-3-0-chinese-version-released/

另外还安装了 Watermark RELOADED 水印插件,没出问题。

2010七月19

WordPress 如何设置QQ域名邮箱–空间禁止mail()

测试了下站点的注册功能,发现邮件发送不了。提示空间禁止 mail() 函数~~:(

多方查找,终于找到解决办法,现分享如下:

1、首先开通QQ的域名邮箱功能,把域名和QQ邮箱进行绑定。

详情访问:http://domain.mail.qq.com/cgi-bin/loginpage

2、安装wordpress插件:WP-Mail-SMTP

在网站后台插件里搜索Mail会找到,进行在线安装。安装完毕点setting进入设置。

3、WP-Mail-SMTP设置如下:

update options  搞定。

4、Send a test Mail

2010七月16

JS:cookies 存、取、删除实例

function SetCookie(name,value)
{
var Days = 1;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getCookie(name)//取cookies函数
{
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;

}
function delCookie(name)//删除cookie
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
2010七月14

Buffalo ajax实例

Buffalo是国人开发的Ajax框架,它可以使用户在js中方便的调用java代码里的方法。

后台配置方法:

1. web.xml中配置相关servlet 如下:

<!–buffalo ajax–>
    <servlet>
        <servlet-name>buffalo</servlet-name>
        <servlet-class>net.buffalo.web.servlet.ApplicationServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>buffalo</servlet-name>
        <url-pattern>/buffalo/*</url-pattern>
    </servlet-mapping>

2. 需要引入的jar包为:

加入两个jar包:buffalo-2.0.jar和commons-logging-api-1.0.4.jar(下载包里有,下载地址见文章最后)。

注:若commons-logging-api-1.0.4.jar不加入,会抛出异常。

3. 编写需要调用的业务类。
如:
1. desktopService.java

package oa.ajax;

/**
 * Created by IntelliJ IDEA.
 * User: wizzer
 * Date: 2010-7-15
 * Time: 16:08:22
 * To change this template use File | Settings | File Templates.
 */
public class desktopService {
        public String getInfoCount(String userId,String depId){

             return "0|1|2";
        }
}

4. 配置文件中配置业务类

 配置文件为:buffalo-service.properties  位置在classes下
 
 内容如下:
 
desktopService=oa.ajax.desktopService
 
 多个类则配置多个: 格式 名称=业务类全名
 
 注意:js里则通过  desktopService来代替oa.ajax.desktopService类执行其中的业务方法
 
 到此后台代码结束

下面为前台调用

5. 在jsp中引入js文件:prototype.js 和 buffalo.js 文件

 <script type=”text/javascript” src=”js/prototype.js”></script>
 <script type=”text/javascript” src=”js/buffalo.js”></script>
 
6. 编写调用js代码

注意:helloService这个是配置文件中配置的名称

<script type="text/javascript">  
      var endPoint = "<%=request.getContextPath()%>/buffalo"; 
      var buffalo = new Buffalo(endPoint);   
      var userId= "wizzer";
      var deptId = "HITS";

function getEventCount() {
 try {
  var buffalo = new Buffalo(endPointTop);

         buffalo.remoteCall("desktopService.getInfoCount", [userId, deptId], function(reply) {

                var str = reply.getResult();
             var ary = str.split("|");

    document.getElementById("msg").innerHTML = "(" + ary[0] + ")";
    document.getElementById("mail").innerHTML = "(" + ary[1] + ")";
    document.getElementById("wait").innerHTML = "(" + ary[2] + ")";
         });
 } catch (ex) {
 }
}

</script>   

    
    <input type=”button” value=”Buffalo远程调用” onclick=”getEventCount();”/>
   
    消息<div id=”msg”></div>
 信箱<div id=”mail”></div>
 待办<div id=”wait”></div>
   
   
Buffalo ajax 最新版下载地址:http://buffalo.sourceforge.net/download.html

2010七月9

CSS+DIV+UL+LI 实现简单下拉菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>wizzer.cn</title>
<style type="text/css">
<!--
* {
margin:0px;
padding:0px;
font-family:"宋体";
font-size:12px;
text-align:center;
}
body ul{
margin:0px auto;
}
#mean{
width:500px;
margin:0px auto;
padding:0px;
}
#mean li{
float:left;
list-style-type:none;
width:80px;
padding:1px;
line-height:25px;
}
.a{
    background-color: #9DDFAA;
    color: #060;
    text-decoration: none;
    border: 1px solid #0C6;
    display: block;

}
.a:hover{
    color: #FFFFFF;
    background-color: #12581A;
    border: 1px solid #6AFF6A;
}
.list{
    width: 80px;

}
.list ul{
margin:0px auto;
padding:0px;
}
.list li{
    float: left;
    height: 18px;
    width: 80px;
}
.b{
    width: 80px;
    background-color: #55BF60;
    line-height:18px;
    display: block;
    text-decoration: none;
    color: #000;
    filter:Alpha(opacity=70);
}
.b:hover{
    background-color: #FFFFFF;
    color: #060;
    text-decoration: none;
    filter:Alpha(opacity=70);
}
.menu2{
    height: 26px;
    width: 80px;
    cursor:hand;
    overflow-y:hidden;
}
#keai{
    width:800px;
    height:50px;
    background-color:#4033D7;
    z-index:-1;
    position: absolute;
    left: 0px;
    top: 35px;
}
-->
</style>
</head>
<body>
<div id="mean">
<ul>
<li onMouseOver="this.className='menu1'"
onMouseOut="this.className='menu2'">
<a href="#">网站首页</a>
<div>
<ul>
<li><a href="#">我的主页</a></li>
<li><a href="#">我的空间</a></li>
<li><a href="#">我的相册</a></li>
<li><a href="#">我的日志</a></li>
</ul>
</div>
</li >
<li onMouseOver="this.className='menu1'"
onMouseOut="this.className='menu2'"><a href="#">新闻公告</a>
<div>
<ul>
<li><a href="#">我的主页</a></li>
<li><a href="#">我的空间</a></li>
<li><a href="#">我的相册</a></li>
<li><a href="#">我的日志</a></li>
</ul>
</div>
</li>
<li onMouseOver="this.className='menu1'"
onMouseOut="this.className='menu2'"><a href="#">产品信息</a>
<div>
<ul>
<li><a href="#">我的主页</a></li>
<li><a href="#">我的空间</a></li>
<li><a href="#">我的相册</a></li>
<li><a href="#">我的日志</a></li>
</ul>
</div>
</li>
<li onMouseOver="this.className='menu1'"
onMouseOut="this.className='menu2'"><a href="#">最新推荐</a>
<div>
<ul>
<li><a href="#">我的主页</a></li>
<li><a href="#">我的空间</a></li>
<li><a href="#">我的相册</a></li>
<li><a href="#">我的日志</a></li>
</ul>
</div>
</li>
<li onMouseOver="this.className='menu1'"
onMouseOut="this.className='menu2'"><a href="#">联系我们</a>
<div>
<ul>
<li><a href="#">我的主页</a></li>
<li><a href="#">我的空间</a></li>
<li><a href="#">我的相册</a></li>
<li><a href="#">我的日志</a></li>
</ul>
</div>
</li>
</ul>
</div>
</body>
</html>