最近在使用Ext的时候,使用Acegi,发现提交的时候有问题,通过查看Ext doc,发现FormPanel默认使用的不是传统方式发送登陆请求的,根据文档,需要重写submit方法,很简单,贴上来希望对后来的朋友有所帮助。

/**
 * 用户登陆页面
 */

com.faceye.compoents.core.security.LoginForm = {
	init : function() {
		var container = com.faceye.ui.Container.init();
		var centerContainer = container
				.getComponent('default-center-body-container');

		var loginForm = new Ext.form.FormPanel({
			labelWidth : 80,
			// url:'/faceye/j_acegi_security_check',
			frame : true,
			title : '用户登陆',
			// el : 'login-form',
			// title: 'Simple Form',
			bodyStyle : 'padding:5px 5px 0',
			width : 370,
			// defaults: {width: 210},
			// renderTo : centerContainer,
			layout : 'form',
			onSubmit : Ext.emptyFn,
			defaultType : 'textfield',
			submit : function() {
				loginForm.getForm().getEl().dom.action = BP
						+ 'j_acegi_security_check';
				loginForm.getForm().getEl().dom.submit();
			},
			items : [{
				fieldLabel : '帐户',
				name : 'j_username',
				width : 200,
				allowBlank : false,
				vtypeText : '帐户不能为空',
				tabIndex : 1
			}, {
				fieldLabel : '密码',
				width : 200,
				name : 'j_password',
				inputType : 'password',
				tabIndex : 2
			}],
			buttons : [{
				text : '登陆',
				type : 'submit',
				tooltip : 'Login',
				clickEvent : 'click',
				handler : function() {
					loginForm.getForm().submit({
						url : BP+'j_acegi_security_check',
						method : 'POST',
						waitMsg : 'Processing the form now',
						waitTitle : 'Member Login',
						success : function(form, action) {
							Ext.Msg.alert('用户登陆', '登陆成功');
						},
						failiure : function(form, action) {
							if (action.failureType == 'server') {
								var obj = Ext.util.JSON
										.decode(action.response.responseText);
								Ext.Msg.alert('用户登陆', '登陆失败'+obj);
							}else{
								Ext.Msg.alert('用户登陆', '登陆失败');
							}

						}
					});

				}

			}]
		});
		centerContainer.add(loginForm);
		centerContainer.doLayout();
		container.render(Ext.getBody());
	}
};



这里面最主要的是:onSubmit : Ext.emptyFn
然后就是写submit
评论
heng2jiali 2008-07-24   回复
请问在Acegi后台返回authenticationFailureUrl时,会刷新,在下面这段的Ext.Msg.alert('')是怎么执行的
loginForm.form.submit({  
                        url : '/jmc/j_acegi_security_check',  
                        method : 'POST',  
                        waitMsg : 'Processing the form now',  
                        waitTitle : 'Member Login',  
                        success : function(form, action) { 
                            Ext.Msg.alert('用户登陆', '登陆成功');
//location.href='/login.do?method=main';
                        },  
                        failiure : function(form, action) {  
                            if (action.failureType == 'server') {  
                                var obj = Ext.util.JSON  
                                        .decode(action.response.responseText);  
                                Ext.Msg.alert('用户登陆', '登陆失败'+obj);  
                            }else{  
                                Ext.Msg.alert('用户登陆', '登陆失败');  
                            }  
 
                        }  
                    });
bencmai 2008-07-14   回复
我用在redirect的action里返回json,简单方便,
JavaFlasher 2008-06-27   回复
引用
这年头并不是谁离开了谁没办法活的年代了,相似的服务,有很多网站都提供,用户感受,至关重要,比如早些时候,javaeye访问速度明显下降,于是很多朋友就说,现在javaeye怎么访问速度慢慢了?


看了半天没看懂你想说啥? 是不是有几个字打错了。
ecsun 2008-06-25   回复
one page one application是一个好的思想

但是实际情况总是不够完美
我们的用户需要快速的从我们的网站得所他所喜欢或是他所请求的服务,在这个时候,速度,至关重要,如果你提供了这样的服务,但速度让用户没办法接受,你无法征得用户。

加载一个相对较小的页面来提高下载速度,是有必要的。
这年头并不是谁离开了谁没办法活的年代了,相似的服务,有很多网站都提供,用户感受,至关重要,比如早些时候,javaeye访问速度明显下降,于是很多朋友就说,现在javaeye怎么访问速度慢慢了?

所以说,one page one application是一个好的思想,但我们没有必要拘拟于这个一个思想,只有最适合的,没有最完美的。
lims 2008-06-24   回复
xyz20003 写道
可你这样搞,就丢失了one page one application的特性了吧?

与其搞的这么复杂,还不如直接写一个html的form省事。html+js的代码都没有使用extjs的多。反正你也要提交的,页面也是要刷新的,所有东西也都要重加载的。

acegi默认实现用的redirect,要想和ajax结合,最简单的方法是在redirect的action里返回json。不会失去ajax的特性,也省的重写acegi内部实现。

我也是用这种方式,你不是说one page one application就是要将所有的应用写一个html里吧
yhcline 2008-06-24   回复
目前正遇到此问题,谢谢楼主~~
yuanfu 2008-05-30   回复
以前实现是自己写了AuthenticationProcessingFilter,覆盖了sendRedirect方法。不做页面跳转。
xyz20003 2008-05-30   回复
可你这样搞,就丢失了one page one application的特性了吧?

与其搞的这么复杂,还不如直接写一个html的form省事。html+js的代码都没有使用extjs的多。反正你也要提交的,页面也是要刷新的,所有东西也都要重加载的。

acegi默认实现用的redirect,要想和ajax结合,最简单的方法是在redirect的action里返回json。不会失去ajax的特性,也省的重写acegi内部实现。
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

ecsun
搜索本博客
我的相册
959d6764-20ee-3f5d-8e7d-62b829f243a0-thumb
Faceye基础版(开源)新建标签页
共 24 张
最近加入圈子
存档
最新评论