jquery調用java
① jquery 調用 java 後台方法
jquery可以通過ajax調用後台。
ajax請包含
$.ajax(url,[settings])
load(url,[data],[callback])
$.get(url,[data],[fn],[type])
$.getJSON(url,[data],[fn])
$.getScript(url,[callback])
$.post(url,[data],[fn],[type])
這些種
具體使用方法可以參照jquery的api
jquery 在線 api http://jquery.cuishifeng.cn/
② jquery.post("url",{},function(data),'json');裡面的data如何用java操作
1、引入包(本文中的包全部引自struts-2.1.8.1\lib):
struts2-json-plugin-2.1.8.1.jar
json-lib-2.1.jar
commons-collections-3.2.jar
commons-beanutils-1.7.0.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
ezmorph-1.0.3.jar
這7個包是返回json形式的數據必須的。因為json大量引用了Apache commons的包,所以要加入4個,commons包,除了commons的包外,還需要引入一個 ezmorph的包。最後加入struts2必須的6個包:
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
ognl-2.7.3.jar
freemarker-2.3.15.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
2、後台:
1) Userinfo實體類代碼
public class UserInfo implements Serializable {
private int userId;
private String userName;
private String password;
get set方法略
}
2) Action類
public class TestAction extends ActionSupport {
private String message; //使用json返回單個值
private UserInfo userInfo; //使用json返回對象
private List userInfosList; //使用josn返回List對象
get set方法略
/*返回單個值*/
public String returnMsg(){
this.message = "成功返回單個值";
return SUCCESS;
}
/*返回UserInfo對象*/
public String returnUser(){
userInfo = new UserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("劉棟");
userInfo.setPassword("123456");
return SUCCESS;
}
/*返回List對象*/
public String returnList(){
userInfosList = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo();
u1.setUserId(10000);
u1.setUserName("張三");
u1.setPassword("111111");
UserInfo u2 = new UserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("222222");
userInfosList.add(u1);
userInfosList.add(u2);
return SUCCESS;
}
}
3) struts.xml(必須繼承json-default、json-default繼承自struts-default)
<package name="default" namespace="/json" extends="json-default">
<action name="returnMsg" class="com.testAction " method="returnMsg">
<result name="success" type="json">
<param name="root">validate</param>
</result>
</action>
<action name="returnUser "
class="com.testAction " method="returnUser ">
<result name="success" type="json">
<param name="includeProperties">
userInfo\.userId,userInfo\.userName,userInfo\.password
</param>
</result>
</action>
<action name="returnList" class="com.testAction "
method="returnList">
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
</action>
</package>
3、前台:
1) 頁面引入jquery-1.4.2.js
2) 代碼如下:
<script language="javascript">
function getMsg(){
$.ajax({
url:'json/returnMsg.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").html(data.message);
}
});
}
function getUser(){
$("# result ").html("");
$.ajax({
url:'json/returnUser.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").append("用戶ID:"+data.userInfo.userId+"")
.append("用戶名:"+data.userInfo.userName+"")
.append("密碼:"+data.userInfo.password+"");
}
});
}
function getUserList(){
$("# result ").html("");
$.ajax({
url:'json/returnList.action',
type:'post',
dataType:'json',
success:function(data){
$.each(data.userInfosList,function(i,value){
$("#result").append("第"+(i+1)+"個用戶")
.append("用戶名:"+value.userName+"")
.append("密碼:"+value.password+"");
}
}
});
}
</script>
<div id="result"></div>
<input type="button" value="獲得單個消息" onclick="getMsg()"/>
<input type="button" value="獲得用戶信息" onclick="getUser()"/>
<input type="button" value="獲得用戶列表" onclick="getUserList()"/>
4、只要繼承extends="json-default",result type設置成json之後,容器會把action的屬性自動封裝到一個json對象中(json攔截器來做),然後調用ajax的callback方法. 返回json數據
5、includeProperties 參數:輸出結果中需要包含的屬性值,這里正則表達式和屬性名匹配,可以用「,」分割填充多個正則表達式。
如:輸出UserInfo的所有屬性及UserInfo的userName屬性
<result type="json">
<param name="includeProperties"> userInfo.*,
userInfo \. userName </param>
</result>
6、excludeProperties 參數:輸出結果需要剔除的屬性值,也支持正則表達式匹配屬性名,可以用「,」分割填充多個正則表達式,類同includeProperties
7、輸出一個JSON List列表
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
其中userInfosList是action中的一個List類型的屬性,userInfosList \[\d+\]\. userName表示,userInfosList中存儲的對象0..end的userName屬性(list中存儲的對象必須有userName屬性)。
8、為什麼要用includeProperties或excludeProperties 參數:主要是為了過濾掉介面,pojo的set、list、其它對象等不需要的數據防止循環取其它關聯對象或找不到介面。如果不配置,默認是處理 action中的所有屬性,如果action中有介面注入,json攔截器可能找不到介面而返回不了結果,還有如果action中有一個對象,這個對象與好多對象都有關聯,json攔截器會將相關聯的所有對象的屬性全部轉換成json格式,如果其它對象有list、set,其返回結果相當龐大,有可能是死循環而無法返回 。如果不用<param name="includeProperties">或其他方式進行json數據過濾,通過debug你會發現前台返回的json字元串,是把 action中的所有屬性全部轉化成json字元串返回給客戶端(包括service介面、pojo所有屬性及有關聯的pojo。有時候根本返回不了結果,也不報錯,後台執行了,但前台執行不到callback function,這主要是因為找不到介面或者關聯的pojo太多,造成死循環),一般情況下用的最多的就是root、 includeProperties 和excludeNullProperties參數。當然還有其他的方法,如給pojo的屬性加json註解。
9、總結: action中避免使用get開頭的action方法,去掉action中的介面的get方法 為json類型的result配置includeProperties, excludeProperties等參數.