之前一直害怕SSH~感觉条条框框的东西很难学习似的,最多用那么一下子的hibernate来做数据库操作,前几天才接触的Struts2,突然又感觉这家伙真的很强大,尝试着用一下子,发现比jsp+servlet真的快速简便得多,于是赶紧上贴分享一下学到的东西。
实现的 功能:异步提交注销登录
用到的技术:struts2 json jquery
过程:
LogOutActio代码:
import java.util.HashMap;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LogOutAction extends ActionSupport {
private Integer uid;
private Map<String, Object> msg = new HashMap<String, Object>();
public Map<String, Object> getMsg() {
return msg;
}
public void setMsg(Map<String, Object> msg) {
this.msg = msg;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
@Override
public String execute() throws Exception {
Map<String, Object> sessionMap = ActionContext.getContext()
.getSession();
Integer id=(Integer) sessionMap.get("id");
if (id == uid && uid!=null) {
sessionMap.remove("id");
sessionMap.clear();
msg.put("s", 1);
}
return SUCCESS;
}
}
struts.xml代码:
<package name="default" extends="json-default" namespace="/">
<action name="LogOut" class="com.blog.user.Action.LogOutAction">
<result type="json">
<param name="root">msg</param>
</result>
</action>
jquery代码:
$(function() {
$("#logOut").click(function() {
var uid = $("#uid").val();
$.ajax({
type : "POST",
url : "LogOut.action",
data : {
uid : uid
},
dataType : 'json',
success : function(data) {
//alert(JSON.stringify(data.s));
if (data.s == 1) {
alert("注销成功,返回登陆页面");
location.href = "/BlogSystem01/login.jsp";
} else {
alert("操作失败,请重新登陆!");
location.href = "/BlogSystem01/login.jsp";
}
}
});
}
);
});
jsp代码:
<a href="#" id="logOut>注销</a>
<input type="hidden" id="uid" value="<s:property value='#session.id' />">
关键点:
1)Action里需要添加一个msg的属性。通过这个属性把信息回传给struts,msg.put("s", 1);就是保存一个map类型的信息。
2)struts的配置:
--首先需要导入struts2-json-plugin-2.2.3.jar。
--然后package的属性:extends="json-default" 。
--action里没写name=“success”时,默认就是success。<result type="json">
--result里 <param name="root">msg</param>中name=“root”是json的根,msg是action里回传数据的那个 属性。
--在js里的DataType=“json”。function里的data就是struts.xml里的msg的数据。所以要访问msg里的“s”,则要data.s!
至此!有不当之处,万求提出更改意见~~
感激不尽!