花了两天时间来研究在Struts2中集成json,然后使用jQuery来实现ajax验证,今天终于大功告成。
我所学习的主要博客链接如 下:http://blog.csdn.net/zhqingyun163/archive/2010/01/18/5208766.aspx(这两个几乎一样,我试了没有成功!)
(记录:一天后终于解决加上
struts2-json-plugin-2.1.8.jar
struts2-junit-plugin-2.1.8.jar这两个包
去掉jsonplugin.jar
不过到现在我在ssh2中集成json还没有成功,如果有哪位大神弄出来的话,教教小弟!
2013-6-7今天终于解决了ssh2中集成json的问题,记得要有commons-lang否则会出错的
)
他 的博客上的包有些冲突,需要重新下载,使用json包的下载链接如下:http://www.163disk.com/fileview_15106.html。
我的loginAction代码如下:
public String login() throws Exception {
// 用一个Map做例子
Map<String, String> map = new HashMap<String, String>();
//用户名唯一
if(userService.findByUserName(userName).isEmpty()){
map.put("name", "error1");
}
else {
User user = (User)userService.findByUserName(userName).get(0);
if(user.getUserStatus().equals(false))
{
map.put("name", "error2");
}
else if(!user.getPassword().equals(password)){
map.put("name", "error3");
}
else{
if(user.getType()==0){
map.put("name", "clerk");
}
//用户为经理
else if (user.getType()==1){
map.put("name", "manager");
}
//用户为系统管理员
else
map.put("name", "admin");
}
}
// 将要返回的map对象进行json处理
JSONObject jo = JSONObject.fromObject(map);
// 调用json对象的toString方法转换为字符串然后赋值给result
this.result = jo.toString();
return SUCCESS;
}
, 其中的findByUserName()方法大家可以自己定义,我的是使用了SSH框架,在service层定义的。
Struts.xml 中的配置如下:
<package name="default" namespace="" extends="json-default">
<act ion name="login" class="loginAction" method="login">
<result type="json">
<param name="root">
result
</param>
</result>
</act ion>
</package>
在login.jsp中使用jQuery来实现ajax的验证效果,代码如下:
<script type="text/javas cript" src="<%=path %>/js/jquery.js">
</script>
<script type="text/javas cript">
$(document).ready( function() {
//使用 Ajax 的方式 判断登录
$("#btn_login").click( function() {
var url = 'login.act ion';
//获取表单值,并以json的数据形式保存到params中
var params = {
userName:$("#userName").val(),
password:$("#password").val()
};
//使用$.post方式
$.post(
url, //服务器要接受的url
params, //传递的参数
function(json){ //服务器返回后执行的函数 参数 da ta保存的就是服务器发送到客户端的数据
var member = ev al("("+json+")"); //包数据解析为json 格式
switch(member.name){
case "error1" : $('#span1').html("用户"+params.userName+"不存在!");break;
case "error2" : $('#span1').html("用户"+params.userName+"已注销!");break;
case "error3" : $('#span1').html("用户"+params.userName+"的密码不正确!");break;
case "clerk" : location.href="<%=path%>/clerkIndex.jsp";
case "manager" : location.href="<%=path%>/managerIndex.jsp";
case "admin" : location.href="<%=path%>/adminIndex.jsp";
}
},
'json' //数据传递的类型 json
);
});
});
</script>
</head>
<body>
<div id="top"></div>
<div id="main">
<div id="user">
<table width="100%" border="0" height="100%" cellpadding="0" cellspacing="0">
<tr>
<td width="30%" height="30" align="right"><label for="userName">用户名:</label></td>
<td width="70%" align="left"><input type="text" name="userName" id="userName" class="input1"></input>
</td>
</tr>
<tr>
<td width="30%" height="30" align="right"><label for="password">密 码:</label></td>
<td width="70%" align="left"><input type="password" name="password" id="password" class="input1"></input>
</td>
</tr>
<tr> <td height="30" align="right"></td>
<td align="left"><span id="span1" class="errorMessage"></span></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="sub" value="登 录" class="button" id="btn_login" />
<input type="reset" name="reset" value="重 置" class="button" />
</td>
</tr>
</table>
</div>
</div>
<div id="bottom">copyright©武汉大学国际软件学院 版权所有</div>
</body>
</html>
关 于json的在act ion的配置我一直弄不明白的是验证成功后,act ion是怎么进行跳转的。我在配置文件中于json的返回值一起配置,发现不起作 用。问了现场的尹经理,才知道ajax的验证需要在js代码中通过调用location.href方法来实行跳转,于是思路顿时清晰,一下搞定了。
网上一大堆 struts2+json 不过大多的json 插件 都是 jsonplugin.34.jar
struts2.18 自己集成了这个东东! struts2-json-plugin-2.1.8.1.jar
1.0 下载 struts2-json-plugin-2.1.8.1.jar 加入项目 (附件里面有哈)
2.0 <package name="XXX" extends="json-default" > 包
3.0 <result type="json"> 具体的action中
4.0 import org.apache.struts2.json.annotations.JSON;
@JSON(name = "goods") 属性好几个 序列化,换个名字等
@JSON(serialize=false) 对于spring 注入的 dao 或者其他属性 在其 get 方法上面 写这个
不序列化 否则 哼哼! 你挂了! (json 会对action 里面的 get 方面 封装结果的)
OK 你已经配置完毕! 可以开始用了! 祝君好运! 有问题 Email:[email protected]