Author Archive

Checkbox不选择时赋值的实现(非选中状态赋值)

2010-11-10, Posted in Java, Web 界面 | 1 回复 | 查看全文>>

Checkbox在不选择时,并不会向服务器发送false值(或者off值),甚至连这个的参数名都不会向服务器端发送,所以通常我们判断取到的值为null,就认为用户没有选择,并给他的值设置为false,但一些情况下,我们可能不是手工来取这个值,而是写了一个统一的函数,直接把所有的参数转成FormBean,在这种情况下,取不到值的情况我们不一定都设置为false,因为还有可能本来就是取NULL的情况,所以如果checkbox 没有传递参数过来,我们也要想办法设置他的值为false.

在Spring的框架中,同样存在这样的问题,他的解决办法是为每一个Checkbox生成一个隐藏域,当用户没有选择checkbox时,也会向服务器端发送按一定规则命名的隐藏域,从而来表达用户没有选择这个控制的事实。

本次项目的框架是自己写的,出于更简单的原则,在做页面时,不为checkbox设置隐藏域,而是在提交过程中,动态为没有选择的checkbox生成隐藏域,这样页面上会更简洁。出于这个思想,用Jquery实现了一个插件,用来为没有选中的checkbox 传递false值给服务器端。代码如下:

jQuery.fangdo = {
	//forms_selector: form的选择器
	checkboxField : function(forms_selector){
		$(forms_selector).each(function(){
			var cur_form = $(this);
			cur_form.submit(function(){
				$(this).find(":checkbox").each(function(i){				
					if(!$(this).attr("checked")){
						cur_form.append("<input type='hidden' value='off' name='"+ $(this).attr('name') +"'></input>");
					}
				});
			});
		});
	}
};

使用的方式主要有如下两种:

$(function(){
        //第一种,引用Form表单的id,注意,这里是id,不是name值
	$.fangdo.checkboxField("#registerForm");
        //第二种,引用所有Form表单,这种情况用于有多个Form都要设置checkbox在非选中状态生成隐藏域
	$.fangdo.checkboxField("Form");
});

如果你有更好的方法,请共享出来,大家一起分享

标签: ,

Struts2项目中配置多个过滤器

2010-10-17, Posted in Java, 软件开发 | 7 回复 | 查看全文>>

Struts2中的项目中,都会在web.xml文件中配置org.apache.struts2.dispatcher.FilterDispatcher这个filter,使得Struts能起作用,然而如果项目中使用多个过滤器,则在web.xml中FilterDispatcher这个过滤器需要配置在所有filter的后面,防止你的过滤器被Struts的这个过滤器中断你的配置,造成你的Filter无法执行

以前做项目没有太注意,一般情况下FilterDispatcher也是放在最后,自己总认为只要配置好了,一切只是执行顺序问题,但最近开始一个项目,把一个Filter放在了FilterDispatcher的后面,启动过程中显示Filter已经正常初始化,确总是没有执行。看了看Struts的源码,原来问题出在FilterDispatcher这个Filter上,如下是doFilter方法中的代码:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        ServletContext servletContext = getServletContext();
 
        String timerKey = "FilterDispatcher_doFilter: ";
        try {
            UtilTimerStack.push(timerKey);
            request = prepareDispatcherAndWrapRequest(request, response);
            ActionMapping mapping;
            try {
                mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());
            } catch (Exception ex) {
                LOG.error("error getting ActionMapping", ex);
                dispatcher.sendError(request, response, servletContext, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
                return;
            }
 
            if (mapping == null) {
                String resourcePath = RequestUtils.getServletPath(request);
 
                if ("".equals(resourcePath) && null != request.getPathInfo()) {
                    resourcePath = request.getPathInfo();
                }
 
                if (serveStatic && resourcePath.startsWith("/struts")) {
                    findStaticResource(resourcePath, findAndCheckResources(resourcePath), request, response);
                } else {
                    chain.doFilter(request, response);//激活下一个过滤器
                }
                // The framework did its job here
                return;
            }
            dispatcher.serviceAction(request, response, servletContext, mapping);
 
        } finally {
            try {
                ActionContextCleanUp.cleanUp(req);
            } finally {
                UtilTimerStack.pop(timerKey);
            }
        }
    }

看上面的代码 mapping=actionMapper.getMapping(request,dispatcher.getConfigurationManager()); 这个是得到当前请求Action的信息,比如Action的名字,命名空间,result值等,只要这个mapping不为null,过滤器就会直接执行action而不会激活下一个过滤器,那么什么时候才会激活下一个过滤器呢?答案要满足两个条件,这两个条件是: 查看全文…

标签: , ,

win7无法安装Office2003的解决办法

2010-08-30, Posted in 一起分享, 常用, 常用技术 | 6 回复 | 查看全文>>

前些日子给朋友在win7上安装office2003时出现错误(实际安装2007也会出现类似错误),错误的提示信息大概是由于权限问题,没有办法写入文件到相关的目录,所以可以肯定问题的根本原因是Win7的账户控制。由于Win7账户安全系数加强,以至于写入核心文件夹程序都需要有权限。所以解决问题的关键是给指定的文件夹及用户以写入权限。

解决方案与步骤如下: 查看全文…

标签: ,

安装win7旗舰版系统后程序激活办法

2010-08-07, Posted in 常用 | 6 回复 | 查看全文>>

 
一、首先下载激活工具
二、双击激活工具,出来界面后,直接点击“激活”按钮,这个过程可能要1到2分钟
常见问题
1》、激活时弹出“系统保留分区未分配驱动器号”的提示,说明系统安装时创建了系统隐藏分区(一般都会有这个分区),我们为保留分区添加驱动器号后才能正常激活。

以下为保留分区添加驱动器号的操作步骤:
1.右键”计算机”—>”管理” 打开“计算机管理”:

2.点击左边的“磁盘管理”,在保留分区上右键“更改驱动器号和路径”,然后添加一个驱动器号(任意):

PS:激活后保留分区的驱动器号就可以删除了(注意:不可以删除或者格式化分区,否则无法进入系统!)

2》、激活时弹出“XX盘请插入磁盘的提示”?(或类似提示)
解答:这部分用户部分是在虚拟机下做的测试才会有这提示的,请确保虚拟机“CD/DVD”选项上“connect”和“connect at power on”打上勾了;另外其它使用者如果也有此提示点击“继续”就行了。也可能是由于其它盘没有格式化。

3》、是不是适用所有计算机?
解答:HP和DELL部分机器由于BIOS特殊,可能不被激活.目前也没有适用的方法,部分用户可能黑屏.使用激活工具激活重启后黑屏的解决办法.
方法一:用PE启动后删除C盘下的grldr文件就行了。
方法二:用安装光盘启动系统进入dos环境下输入以下内容并重启就行:
attrib X:\grldr -h -s -r
del X:\grldr

标签:

Google analytics脚本异步加载,加快访问速度

2010-07-26, Posted in Web 界面, 一起分享, 常用 | 1 回复 | 查看全文>>

Google analytics本身提供的脚本都是在页面全部加载完成后才会执行,如果网络情况不太好,这不仅影响统计,也会影响到访问速度,所以使用Google analytics,最完美的办法就是实现脚本异步加载,来加快页面访问速度。如果你现在还在使用google analytics,可以用如下代码替代原来的统计代码,实现异步统计:

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq.push(['_trackPageview']);
 
(function() {
var ga = document.createElement('script');
ga.src = ('https:' == document.location.protocol ?
    'https://ssl' : 'http://www') +
    '.google-analytics.com/ga.js';
ga.setAttribute('async', 'true');
document.documentElement.firstChild.appendChild(ga);
})();

很明显,需要把UA-XXXXX-X替换成你的ID就成了。

查看全文…

标签: