亚洲成av人在线观看网站,亚洲人成色7777在线观看不卡,亚洲熟妇AV一区二区三区浪潮http://m.tkk7.com/patterns/category/8263.html離離原上草,一歲一枯榮。野火燒不盡,春風吹又生。 zh-cnTue, 27 Feb 2007 13:34:51 GMTTue, 27 Feb 2007 13:34:51 GMT60prototype.js + util.js使ajax更加簡單透明http://m.tkk7.com/patterns/archive/2006/05/14/prototype_util_ajax.html野草野草Sun, 14 May 2006 13:29:00 GMThttp://m.tkk7.com/patterns/archive/2006/05/14/prototype_util_ajax.htmlhttp://m.tkk7.com/patterns/comments/46130.htmlhttp://m.tkk7.com/patterns/archive/2006/05/14/prototype_util_ajax.html#Feedback0http://m.tkk7.com/patterns/comments/commentRss/46130.htmlhttp://m.tkk7.com/patterns/services/trackbacks/46130.html 近一段時間,學習ajax的應用,接觸了dwr框架和AjaxTags??傮w覺得dwr使用配置比較復雜,不太透明,使人有一種不太放心的感覺,且對struts的支持不夠好。AjaxTags的使用具有頁面元素的針對性,不夠自由。故此我想將prototype.js和dwr的util.js結(jié)合起來,使我們的ajax應用更加透明和簡單。

?這樣組合的優(yōu)勢?

1、? 只是增加了兩個js文件和處理你頁面的js,這些東西對你是透明的,很簡單。

2、? 不影響服務器端的架構(gòu),不管你是只使用struts,還是struts + spring + hibernate。


服務端向客戶端提供了什么?

1、? 簡單對象

String、int、Date等類型的單一數(shù)據(jù),返回給客戶端顯示都是字符串。

2、? 復雜對象

用戶自定義POJO對象。

3、? 列表對象

List對象,里面放的是同一POJO對象。

客戶端可以解析什么?

1、? 簡單對象沒有問題。

2、? 復雜對象可以使用類似于map對象來代替,例如:

public class Person {

??? private int id;

?

??? private String name;

?

??? private String gender;

?

??? private int age;

?

??? public void setId(int id) {

??????? this.id = id;

??? }

?

??? public String getName() {

??????? return name;

}

。。。

}

可使用如下形式來表示:

var person = { id:'001', name:'test1', gender:'男', age:'15' };

3、? 列表對象,可以使用array對象中放置map對象表示,例如:

var people =[{ id:'001', name:'test1', gender:'男', age:'15' },{ id:'002', name:'test2', gender:'女', age:'13' } ]

客戶端怎么解析?

這時就可以發(fā)揮util.js的功能了,在dwr網(wǎng)站上可以詳見。

ajax在哪里?

ajax的應用在prototype.js中,它針對ajax提供了好多方法,詳細可見prototype開發(fā)筆記。

struts怎么返回?

我想代碼你一看就明白:

public ActionForward excute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {

??? try {

??????? String text = null;

?

??????? // 用戶登錄名

??????? String logonName = request.getParameter("logonName");

???????

??????? logonName = StringUtil.convertEncoding(logonName,"ISO8859_1");

?

??????? // 到數(shù)據(jù)庫中進行檢驗...

??????? System.out.println("logonName:" + logonName);

?

??????? // 該用戶已經(jīng)存在

??????? text = logonName;

?

??????? // 將結(jié)果返回頁面

??????? response.setContentType("text/xml; charset=UTF-8");

??????? response.setHeader("Cache-Control", "no-cache");

??????? PrintWriter pw = response.getWriter();

??????? pw.write(text);

??????? pw.close();

???????

??? } catch (Exception e) {

??????? e.printStackTrace();

?? ?}

???????

??? //注意

??? return null;

}

到底怎么用?

1、? 客戶端使用get方式發(fā)送數(shù)據(jù),如果要發(fā)送的是form數(shù)據(jù)可以使用prototype.js中的方法生成參數(shù),例如:var pars = Form.serialize(document.all.personForm)。代碼片斷如下:

/*

增加人員

*/

function writePerson() {

??? var url = 'ajax.do?method=showTableRows';

? var pars = Form.serialize(document.all.personForm);

?

? ?? new Ajax.Request(

????? url,

????? {method: 'get', parameters: pars, onComplete: personResult}

? );

}

?

function personResult(result){

??? fillTable(eval(result.responseText));

}

2、? 服務器端的action接受數(shù)據(jù)可以使用ActionForm(ActionServlet會自動封裝數(shù)據(jù)字串的),也可以使用:String personId = request.getParameter("personId")這樣的方法單獨得到數(shù)據(jù)。

3、? 在服務器端使用AjaxUtil(我寫的一個工具類),將結(jié)果轉(zhuǎn)變成map或array,再返回給客戶端。

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.util.List;

?

import org.apache.commons.beanutils.BeanUtils;

?

public class AjaxUtil {

??? /**

???? * 將list結(jié)構(gòu)轉(zhuǎn)變成js的array結(jié)構(gòu),要求list中包含的是model

???? * 例如:[{id:'1001',name:'test1'},{id:'1002',name:'test2'},{id:'1003',name:'test3'}]

???? *

???? * @param list

???? *??????????? List結(jié)構(gòu)

???? * @return js的array結(jié)構(gòu)

???? *

???? * @throws IllegalAccessException

???? * @throws InvocationTargetException

???? * @throws NoSuchMethodException

???? */

??? public static String list2StrArray(List list) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {

??????? StringBuffer strMap = new StringBuffer();

?

??????? strMap.append("[");

??????? int listSize = list.size();

??????? for (int i = 0; i < listSize; i++) {

??????????? Object obj = list.get(i);

?

??????????? if (i != listSize - 1)

?? ?????????????strMap.append(model2StrMap(obj)).append(",");

??????????? else

??????????????? strMap.append(model2StrMap(obj));

??????? }

??????? strMap.append("]");

?

??????? return strMap.toString();

??? }

?

??? /**

???? * 將model的結(jié)構(gòu)轉(zhuǎn)變成js的map結(jié)構(gòu)

???? * 例如:{id:'1001',name:'test'}

???? *

???? * @param obj

???? *??????????? 任一對象

???? * @return js的map結(jié)構(gòu)

???? *

???? * @throws IllegalAccessException

???? * @throws InvocationTargetException

???? * @throws NoSuchMethodException

???? */

??? public static String model2StrMap(Object obj) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {

??????? StringBuffer strMap = new StringBuffer();

?

??????? // 獲得model的屬性字段

??????? Class clazz = obj.getClass();

??????? Field[] fields = clazz.getDeclaredFields();

?

??????? // 取出mode的屬性值

??????? strMap.append("{");

??????? for (int i = 0; i < fields.length; i++) {

??????????? String fieldName = fields[i].getName();

??????????? String fieldValue = BeanUtils.getProperty(obj, fieldName);

?

??????????? if (i != fields.length - 1)

??????????????? strMap.append(fieldName + ":'" + fieldValue + "',");

??????????? else

??????????????? strMap.append(fieldName + ":'" + fieldValue + "'");

??????? }

??????? strMap.append("}");

?

??????? return strMap.toString();

??? }

?

}


4、? 客戶端得到map或array后,使用dwr的util.js提供的方法向頁面元素填充數(shù)據(jù)。

例程下載

simpleAjaxDemo



野草 2006-05-14 21:29 發(fā)表評論
]]>
在DWR中調(diào)用Http Servlet 對象http://m.tkk7.com/patterns/archive/2006/04/07/dwr_access_servletobjects.html野草野草Fri, 07 Apr 2006 14:09:00 GMThttp://m.tkk7.com/patterns/archive/2006/04/07/dwr_access_servletobjects.htmlhttp://m.tkk7.com/patterns/comments/39926.htmlhttp://m.tkk7.com/patterns/archive/2006/04/07/dwr_access_servletobjects.html#Feedback0http://m.tkk7.com/patterns/comments/commentRss/39926.htmlhttp://m.tkk7.com/patterns/services/trackbacks/39926.html 我們在實際的 web 應用開發(fā)過程中,在用戶登錄后會向 session 中塞入一些信息(例如用戶信息,菜單信息等),在頁面提交后,會從 session 中取出這些信息,拼成完整的業(yè)務記錄,保存到數(shù)據(jù)庫中。此時就要求 DWR 可以與 Servlet 對象通信。

其實 DWR 已經(jīng)考慮好了,在 DWR1.1 中可以利用 uk.ltd.getahead.dwr.WebContext uk.ltd.getahead.dwr.WebContextFactory 來和 Http Servlet 的標準對象進行通信,包括:

l???????? HttpServletRequest

l???????? HttpServletResponse

l???????? HttpSession

l???????? ServletContext

l???????? ServletConfig

?????? 具體的使用方法如下:

import javax.servlet.http.HttpServletRequest;

import uk.ltd.getahead.dwr.WebContext;

import uk.ltd.getahead.dwr.WebContextFactory;

?

///

WebContext ctx = WebContextFactory.get();

HttpServletRequest req = ctx.getHttpServletRequest();

?????? WebContext 是使用 ThreadLocal 保存的,你可以看一下 uk.ltd.getahead.dwr.impl.DefaultWebContextBuilder 源碼,所以可以在任何地方使用它,例如在上一篇的 demo 中進行測試如下:

index.html 頭部增加如下代碼并改名為 index.jsp

<%@ page contentType="text/html; charset=GBK" %>

?

<%

System.out.println("This is DWR servlet object!");

?

session.setAttribute("dwr","love dwr");

%>

修改 MessageDao.java 的代碼如下

package test.dwr;

?

import javax.servlet.http.HttpServletRequest;

?

import uk.ltd.getahead.dwr.WebContext;

import uk.ltd.getahead.dwr.WebContextFactory;

?

public class MessageDao {

??? public Message save(Message message) {

?

??????? WebContext ctx = WebContextFactory.get();

??????? HttpServletRequest req = ctx.getHttpServletRequest();

???????

?

?????? ?System.out.println("========HttpServletRequest Begin=======");

??????? System.out.println("req:" + req.getRemoteHost());

??????? System.out.println("req-session:" + req.getSession().getAttribute("dwr"));

??????? System.out.println("text:" + req.getParameter("text"));

??????? System.out.println("from:" + req.getParameter("from"));

??????? System.out.println("=========HttpServletRequest End========");

?

??????? System.out.println("========Lucky DWR Begin=======");

??????? System.out.println("text:" + message.getText());

??????? System.out.println("from:" + message.getFrom());

??????? System.out.println("=========Lucky DWR End========");

?

??????? return message;

??? }

?

??? public Message get() {

??????? return new Message("This is the first dwr demo!", "test");

??? }

}

?



野草 2006-04-07 22:09 發(fā)表評論
]]>
DWR使得Java中的AJAX變得簡單http://m.tkk7.com/patterns/archive/2006/04/02/first_dwr_demo.html野草野草Sun, 02 Apr 2006 12:41:00 GMThttp://m.tkk7.com/patterns/archive/2006/04/02/first_dwr_demo.htmlhttp://m.tkk7.com/patterns/comments/38766.htmlhttp://m.tkk7.com/patterns/archive/2006/04/02/first_dwr_demo.html#Feedback1http://m.tkk7.com/patterns/comments/commentRss/38766.htmlhttp://m.tkk7.com/patterns/services/trackbacks/38766.html閱讀全文

野草 2006-04-02 20:41 發(fā)表評論
]]>
在Struts中使用AjaxTags解決連動問題http://m.tkk7.com/patterns/archive/2006/03/08/strutsAjaxLinkage.html野草野草Wed, 08 Mar 2006 13:12:00 GMThttp://m.tkk7.com/patterns/archive/2006/03/08/strutsAjaxLinkage.htmlhttp://m.tkk7.com/patterns/comments/34354.htmlhttp://m.tkk7.com/patterns/archive/2006/03/08/strutsAjaxLinkage.html#Feedback3http://m.tkk7.com/patterns/comments/commentRss/34354.htmlhttp://m.tkk7.com/patterns/services/trackbacks/34354.html閱讀全文

野草 2006-03-08 21:12 發(fā)表評論
]]>
主站蜘蛛池模板: 亚洲综合激情九月婷婷| 日本一区二区在线免费观看| 国产精品黄页在线播放免费| 人人爽人人爽人人片av免费| 国产精一品亚洲二区在线播放| 免费人成网站在线观看10分钟| 免费的黄色的网站| 亚洲黄色在线播放| 免费永久看黄在线观看app| 精品成人免费自拍视频| 亚洲熟妇无码av另类vr影视| 亚洲欧洲国产精品久久| 免费看一级做a爰片久久| 99视频在线免费看| 国产成人亚洲综合无| 亚洲图片一区二区| 亚洲AV无码一区二区三区在线观看 | 亚洲日本中文字幕天堂网| 无码av免费一区二区三区试看| 亚洲精品无码久久久久秋霞 | 亚洲国产aⅴ综合网| 99国产精品免费观看视频| 免费夜色污私人影院网站| 久久精品国产亚洲AV无码麻豆| 全部免费毛片免费播放| 四虎国产精品免费久久| 最新国产乱人伦偷精品免费网站| 亚洲乱亚洲乱妇24p| 久久精品蜜芽亚洲国产AV| 亚洲欭美日韩颜射在线二| 国产嫩草影院精品免费网址| 1a级毛片免费观看| 野花香高清在线观看视频播放免费| 亚洲精品无码一区二区| 亚洲一区动漫卡通在线播放| 亚洲欧洲美洲无码精品VA| 亚洲精品97久久中文字幕无码| 在线观看免费毛片| 成人免费AA片在线观看| 99免费视频观看| 99视频免费播放|