这个是本菜鸟自己遇到在难题,用了半天才解决,所以来分享一下。
目的是实现SpringMVC 和 ExtJs 能够通过Ajax 结合起来,也就是在Ext页面实现动态刷新。
目的是实现SpringMVC 和 ExtJs 能够通过Ajax 结合起来,也就是在Ext页面实现动态刷新。
主要是用来解决Ext的Ajax回调函数无响应的情况
本次举的例子是动态验证用户名是否重复
1.额外需要的Jar包
mysoa-0.9.4.jar
slf4j-api-1.6.3.jar
2.ExtJS页面 JSP 编写
<%@
page
language
=
"java"
contentType
=
"text/html; charset=UTF-8"
pageEncoding
=
"UTF-8"
%>
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
>
<
title
>
Insert title here
</
title
>
<
link
href
=
"../css/body.css"
type
=
"text/css"
rel
=
"stylesheet"
/>
<
link
href
=
"../js/ext-4.1.0-beta-3/resources/css/ext-all.css"
type
=
"text/css"
rel
=
"stylesheet"
/>
<
script
src
=
"../js/ext-4.1.0-beta-3/ext-all.js"
type
=
"text/javascript"
></
script
>
<
script
src
=
"../js/jquery/jquery-1.7.2.min.js"
type
=
"text/javascript"
></
script
>
<
script
type
=
"text/javascript"
>
var
uname = Ext.create(
'Ext.form.TextField'
,{
id :
'userName'
,
fieldLabel :
'*用户名'
,
name :
'userName'
,
labelStyle :
"font-size:15px;padding: 10px;"
,
labelAlign :
'right'
,
allowBlank :
false
,
blankText :
'用户名不能为空'
,
//vtype : 'checkUser',
listeners : {
blur : valiUserName
},
});
var
pwd = Ext.create(
'Ext.form.TextField'
,{
id :
'userPwd'
,
inputType :
'password'
,
name :
'userPwd'
,
fieldLabel :
'*密 码'
,
labelStyle :
"font-size:15px;padding: 10px;"
,
labelAlign :
'right'
,
allowBlank :
false
,
blankText :
'密码不能为空'
,
listeners : {
blur : valiUserPwd
},
});
var
confirmPwd = Ext.create(
'Ext.form.TextField'
,{
id :
'confirmPwd'
,
inputType :
'password'
,
fieldLabel :
'*确认密码'
,
labelStyle :
"font-size:15px;padding: 10px;"
,
labelAlign :
'right'
,
allowBlank :
false
,
blankText :
'确认密码不能为空'
,
vtype :
'password'
,
initialPassField :
'userPwd'
,
listeners : {
specialKey :
function
(field,e){
if
(e.getKey() == Ext.EventObject.ENTER) register();
},blur : valiPwdAndConfirmPwd
}
});
var
panelMain = Ext.create(
'Ext.form.Panel'
,{
id :
'registerForm'
,
frame :
true
,
border :
false
,
waitMsgTarget:
true
,
bodyStyle :
'background:#afb4db;padding:20px 70px 50px;'
,
buttonAlign :
'center'
,
items : [uname,pwd,confirmPwd],
buttons : [{
text :
'立即注册'
,
disabled:
true
,
formBind:
true
,
handler : register
}]
});
var
win = Ext.create(
'Ext.window.Window'
,{
title :
'欢迎使用注册页面'
,
width : 450,
height : 302,
layout :
'fit'
,
border :
false
,
maxmizable :
false
,
resizable :
false
,
draggable :
false
,
closable :
false
,
items : panelMain
});
Ext.onReady(
function
(){
//自定义的vtype
Ext.apply(Ext.form.field.VTypes, {
password:
function
(val, field) {
if
(field.initialPassField) {
var
pwd = field.up(
'form'
).down(
'#'
+ field.initialPassField);
return
(val == pwd.getValue());
}
return
true
;
},
passwordText:
'两次输入的密码不一致'
,
checkUser :
function
(val) {
if
(
null
!=val &&
""
!=val) {
jQuery.ajax({
type:
"POST"
,
dataType:
"json"
,
url:
"register.do?action=check&userName="
+val,
success:
function
(msg){
return
false
;
}
});
}
return
true
;
},
checkUserText :
'用户名已存在'
});
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget =
'under'
;
win.show();
});
//注册
function
register() {
/* panelMain.getForm().submit({
clientValidation : true,
url : 'register.do?action=register',
method : 'post'
}); */
var
userName = uname.getValue();
var
userPwd = pwd.getValue();
if
(panelMain.getForm().isValid()) {
jQuery.ajax({
type:
"POST"
,
dataType:
"json"
,
url:
"register.do?action=register&userName="
+userName+
"&userPwd="
+userPwd,
success:
function
(msg){
if
(msg.success){
Ext.Msg.alert(
"Message"
,msg.description);
window.location.href = "
<%=
request.getContextPath()
%>
/index.jsp
";
}
}
});
}
}
//动态验证用户名是否存在
function
valiUserName() {
var
userName = uname.getValue();
if
(userName !=
null
&& userName !=
""
){
jQuery.ajax({
type:
"POST"
,
dataType:
"json"
,
url:
"register.do?action=check&userName="
+userName,
success:
function
(msg){
if
(msg.success){
Ext.Msg.alert(
"Message"
,
"用户名已存在,请重新填写"
);
uname.focus(
true
);
}
}
});
}
}
//验证密码
function
valiUserPwd() {
}
//验证确认密码
function
valiPwdAndConfirmPwd() {
}
</
script
>
</
head
>
<
body
>
</
body
>
</
html
>
|
3.SpringMVC陪置页面
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:p
=
"http://www.springframework.org/schema/p"
xmlns:context
=
"http://www.springframework.org/schema/context"
xsi:schemaLocation
=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>
<!-- Initializing Spring FrameworkServlet ' annomvc'时实例化bean,并自动依赖注入 -->
<!-- 规约这里只扫描controller -->
<
context:component-scan
base-package
=
"com.kedacom.login.common.user.controller"
/>
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<
bean
class
=
"org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"
/>
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<
bean
class
=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix
=
"/"
p:suffix
=
".jsp"
/>
</
beans
>
|
4.Java注册页面
package
com.kedacom.login.common.user.controller;
import
javax.annotation.Resource;
import
javax.servlet.http.HttpServletResponse;
import
org.mysoa.core.model.Message;
import
org.mysoa.core.web.DirectlyRenderUtils;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
com.kedacom.login.user.entity.User;
import
com.kedacom.login.user.manager.RegisterManager;
@Controller
@RequestMapping
(
"/user/register.do"
)
public
class
LoginRegisterController {
@Resource
(name =
"registerManager"
)
private
RegisterManager
registerManager
;
private
final
String
URL_REGISTER
=
"/login/register"
;
/**
* 直接进入注册界面
*
@return
*/
@RequestMapping
(params=
"action=initRegister"
)
public
String initRegister(){
return
URL_REGISTER
;
}
/**
* 用户注册
*
@param
request
*
@param
response
*/
@RequestMapping
(params=
"action=register"
)
public
void
registerUser(HttpServletResponse response,String userName,String userPwd) {
Message msg =
new
Message();
User user =
new
User();
user.setUserName(userName);
user.setUserPwd(userPwd);
boolean
isSuccess =
registerManager
.registerUser(user);
if
(isSuccess) {
msg.setSuccess(
true
);
msg.setDescription(
"注册成功"
);
}
else
{
msg.setSuccess(
false
);
msg.setDescription(
"注册失败"
);
}
DirectlyRenderUtils. renderJson(response, msg);
}
/**
* 验证用户名是否重复
*
@param
response
*
@param
userName
*/
@RequestMapping
(params=
"action=check"
)
public
void
checkUser(HttpServletResponse response,String userName) {
Message msg =
new
Message();
msg.setSuccess(
false
);
boolean
isExist =
registerManager
.checkUserByName(userName );
if
(isExist) {
//如果用户名存在
msg.setSuccess(
true
);
msg.setDescription(
"用户名已经存在"
);
}
DirectlyRenderUtils. renderJson(response, msg);
}
}
|
结束。。。