AJAX 鎸囧崡
榪涜涓?..
鍦╡XtremeTable涓嬌鐢ˋJAX闈炲父綆鍗曪紝瀵圭幇鏈夊姛鑳界殑鎵╁睍涔熼潪甯告柟渚褲?AJAX鏁村悎涓涓渶寮哄ぇ鐨勫湴鏂規槸瀹冧笉闇瑕佹暣鍚堛備綘鍙互鑷敱鍦頒嬌鐢ㄤ換浣曚綘鎯寵浣跨敤鐨凙JAX宸ュ叿鍖呫傛墍鏈変綘瑕佸仛鐨勫氨鏄細褰撹〃鐨刟ction琚皟鐢ㄦ椂錛屽憡璇?eXtremeTable浣跨敤浠涔坖avascript銆傝〃鐨刟ctions鍖呮嫭錛氳繃婊ゃ佹帓搴忋佸垎欏點佹樉紺虹殑琛屾暟鍜屽鍑恒?
鍦ㄦ垜鑷繁鐨勭ず渚嬩腑鎴戝皢浣跨敤闈炲父閰風殑DWR宸ュ叿鍖呫侱WR 闇瑕佺殑綺樺悎浠g爜闈炲父灝戯紝榪欐牱鎴戜滑鍙渶瑕佸叧娉ㄥ浣曟瀯寤鴻〃銆備綘鍙互閫氳繃鏈珯紺轟緥鐪嬪埌鏁堟灉!
Assembler Example
鏈ず渚嬩腑灝嗛渶瑕佸畨瑁匘WR宸ュ叿鍖咃紝鍒涘緩POJO鏉ユ瀯閫犺〃騫跺垱寤哄寘鍚玡XtremeTable鐨凧SP欏甸潰銆?
瀹夎DWR
棣栧厛瑕佸仛鐨勫氨鏄?a rel="nofollow" title="http://getahead.ltd.uk/dwr/download" class="external text" >涓嬭澆DWR宸ュ叿鍖呫備綘搴旇嫻忚緗戠珯鐨勪嬌鐢ㄨ鏄庯紝涓嶈繃涓嬮潰鏄垜璁╁畠絎﹀悎鎴戠殑闇瑕佹潵宸ヤ綔鎵榪涜鐨勬搷浣?
- 灝哾wr-1.1.jar鎷瘋礉鍒癢EB-INF/lib鐩綍
- 鍦╓EB-INF鐩綍涓嬪垱寤轟竴涓猟wr.xml鏂囦歡
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr> <allow> <create creator="new" javascript="Assembler"> <param name="class" value="org.extremesite.controller.Assembler"/> <include method="getTable"/> </create> </allow> <signatures> <![CDATA[ import java.util.Map; import java.util.List; import org.extremesite.controller.Assembler; import javax.servlet.http.HttpServletRequest; Assembler.getTable(Map<String, List> parameterMap, HttpServletRequest request); ]]> </signatures> </dwr>
綆鑰岃█涔嬶紙In a nutshell錛夊垱寤猴紙create錛夋爣絳懼厑璁稿綋鏂規硶琚皟鐢ㄦ椂錛屽弬鐓ф瀯寤鴻〃闇瑕佺殑POJO銆傜鍚嶏紙signature錛夋爣絳懼0鏄庝簡琚皟鐢ㄦ柟娉曚嬌鐢ㄧ殑瀹為檯 綾誨瀷銆?鏈ず渚嬬殑Assembler綾葷殑getTable鏂規硶灝嗛氳繃浼犲叆涓涓狹ap錛堝寘鍚玣orm鍙傛暟錛夊拰HttpServletRequest銆?
- 鍦╓EB-INF/web.xml涓DWR servlet榪涜澹版槑
<servlet> <servlet-name>dwr-invoker</servlet-name> <display-name>DWR Servlet</display-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
浠ヤ笂灝卞畬鎴愪簡DWR servlet鐨勮緗紝瀹冭鐢ㄦ潵璋冪敤浣犵殑POJO銆傞櫎浜嗚緗畠錛屼綘涓嶉渶瑕佸榪欎釜servlet鏈夋洿澶氱殑浜嗚В銆?
鍒涘緩POJO
DWR浣跨敤錛坵orks with錛塒OJOs銆傝繖涓潪甯哥鍚堟垜浠殑闇瑕侊紝鍥犱負eXtremeTable鏈夎凍澶熺殑API浣跨敤Jsp鏍囩鏉ユ瀯閫犺〃銆傚疄闄呬笂錛孞SP鏍囩鍙笉榪囨槸eXtremeTable Java API鐨勫墠绔傞鍏堬紝鎴戝皢灞曠ず鏋勯犺〃鐨勬柟娉曪細
public class Assembler { private Object build(TableModel model, Collection presidents) throws Exception { Table table = model.getTableInstance(); table.setTableId("assembler"); table.setItems(presidents); table.setAction(model.getContext().getContextPath() + "/assembler.run"); table.setTitle("Presidents"); table.setOnInvokeAction("buildTable('assembler')"); model.addTable(table);
Export export = model.getExportInstance(); export.setView(TableConstants.VIEW_XLS); export.setViewResolver(TableConstants.VIEW_XLS); export.setImageName(TableConstants.VIEW_XLS); export.setText(TableConstants.VIEW_XLS); export.setFileName("output.xls"); model.addExport(export);
Row row = model.getRowInstance(); row.setHighlightRow(Boolean.FALSE); model.addRow(row);
Column columnName = model.getColumnInstance(); columnName.setProperty("fullName"); columnName.setIntercept((AssemblerIntercept.class).getName()); model.addColumn(columnName);
Column columnNickName = model.getColumnInstance(); columnNickName.setProperty("nickName"); model.addColumn(columnNickName);
Column columnTerm = model.getColumnInstance(); columnTerm.setProperty("term"); model.addColumn(columnTerm);
Column columnBorn = model.getColumnInstance(); columnBorn.setProperty("born"); columnBorn.setCell(TableConstants.DATE); model.addColumn(columnBorn);
Column columnDied = model.getColumnInstance(); columnDied.setProperty("died"); columnDied.setCell(TableConstants.DATE); model.addColumn(columnDied);
Column columnCareer = model.getColumnInstance(); columnCareer.setProperty("career"); model.addColumn(columnCareer);
return model.assemble(); } }
涓婇潰鐨勫ぇ閮ㄥ垎浠g爜鏄嚜瑙i噴鎬х殑錛屼綘灝嗗湪涓嬮潰鐪嬪埌濡備綍鏋勯犱竴涓猅ableModel錛屼絾鏄鍏堜綘搴旇娉ㄦ剰鍒癟ableModel鏄瀯閫犺〃鏃墮渶瑕佷氦浜掔殑 鍞竴瀵硅薄銆傛瀯閫犺〃鐨勭涓姝ュ氨鏄嬌鐢═ableModel鏉ュ垱寤篢able銆丷ow銆丆olumn鍜孍xport銆?涓鏃︿綘鍒涘緩浜嗕竴涓猰odel瀵硅薄錛屼綘鍙渶瑕佸皢瀹冩坊鍔犲埌model涓傞櫎闈炰綘灝嗗畠娣誨姞鍒癟ableModel錛屽惁鍒欑殑璇漨odel灝嗕笉浼氭槸鐢ㄥ畠銆傛墍鏈変笢瑗垮凡 緇忔瀯寤哄ソ鍚庯紝浣犲彧闇瑕佽皟鐢╩odel.assemble()鏂規硶鏉ユ瀯閫犺〃浜嗐?
鍙兘table.setOnInvokeAction("buildTable('assembler')");鏄渶鏈夎叮鐨勮皟鐢ㄣ傚綋浣犱嬌鐢ㄨ〃鐨刟ctions(緲婚〉銆佽繃婊ゃ佹帓搴?.....)錛岃繖涓猨avascript鏂規硶灝嗚璋冪敤銆傚鏋滆〃鐨刼nInvokeAction絀虹櫧錛屽垯榛樿鐨刯avascript鏂規硶灝嗚鎻愪氦錛坰ubmit錛?錛屾濡備綘鎵鏈熸湜鐨勯偅鏍楓?
Assembler綾葷殑鍙︿竴涓柟娉?--getTable()錛?
public class Assembler { public String getTable(Map parameterMap, HttpServletRequest request) { WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
PresidentsDao presidentsDao = (PresidentsDao) webApplicationContext.getBean("presidentsDao"); Collection presidents = presidentsDao.getPresidents();
Context context = null; if (parameterMap == null) { context = new HttpServletRequestContext(request); } else { context = new HttpServletRequestContext(request, parameterMap); }
TableModel model = new TableModelImpl(context); try { return build(model, presidents).toString(); } catch (Exception e) { e.printStackTrace(); }
return ""; } }
榪欎釜鏂規硶璋冪敤姣旇緝棰戠箒錛屽畠鎵ц鍙岄噸鑱岃矗銆傚畠闇瑕佽Controller錛堝鏋滀嬌鐢⊿pring鐨勮瘽錛夊湪絎竴嬈¤皟鐢紝濡傛灉浣跨敤Struts灝辯瓑鍚屼簬Action綾匯?/em> 闅忓悗錛?褰撲嬌鐢ˋJAX鏃訛紝榪欎釜鏂規硶涔熼渶瑕佽璋冪敤錛屼絾鏄繖嬈″皢浼犲叆涓涓畾鍒剁殑parameterMap銆俻arameterMap灝嗗寘鍚玡XtremeTable浣跨敤AJAX闇瑕佺殑鎵鏈夊弬鏁般傚綋浣犵湅浜?Controller鍜孞SP鍚庯紝榪欑偣灝嗘洿鍔犳竻鏅般?
Controller
public class AssemblerController extends AbstractController { public String successView;
public void setSuccessView(String successView) { this.successView = successView; }
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mv = new ModelAndView(successView); Assembler assembler = new Assembler(); Object viewData = assembler.getTable(null, request); request.setAttribute("assembler", viewData); return mv; } }
controller鍦ㄨ絎竴嬈¤皟鐢ㄦ椂鏉ユ瀯寤鴻〃銆傚畠璋冪敤POJO騫跺皢琛ㄤ紶緇檙equest銆傛敞鎰忕┖鍊鹼紙null錛夊浣曚嬌鐢╬arameterMap浼犺緭銆傝繖鏄洜涓虹涓嬈¤〃琚瀯閫犳椂錛屾病鏈夊搴旇〃闇瑕佺煡閬撶殑actions銆?
JSP
閫氳繃寮曞叆(importing)鍚堥傜殑javascript鏂囦歡鏉ュ紑濮嬫瀯寤篔SP欏甸潰銆傚敮涓闇瑕佸寘鍚繘宸ョ▼鐨刯avascript鏂囦歡鏄痚xtremecomponents.js錛屽叾瀹冪殑javascript鏂囦歡鐢蟲槑閮芥槸DWR浣跨敤鐨勩?
<script type="text/javascript" src="<c:url value="/dwr/interface/Assembler.js"/>"></script> <script type="text/javascript" src="<c:url value="/dwr/engine.js"/>"></script> <script type="text/javascript" src="<c:url value="/dwr/util.js"/>"></script> <script type="text/javascript" src="<c:url value="/js/extremecomponents.js"/>"></script>
鎺ョ潃錛屾彃鍏ラ挬瀛愶紙hook)鏉ユ樉紺鴻〃錛宒iv琚敤鏉ヨ皟鐢╥nnerHtml騫舵瀯寤烘柊鐨勬爣絳俱?
<div id="tableDiv"> <c:out value="$" escapeXml="false"/> </div>
鏈鍚庯紝娣誨姞javascript鏉ヨ皟鐢―WR鐨勯挬瀛愶紙hooks錛夈?
<script type="text/javascript"> function buildTable(form) { var parameterMap = getParameterMap(form); Assembler.getTable(parameterMap, showTable); }
function showTable(table) { document.getElementById('tableDiv').innerHTML=table; } </script>
getParameterMap()鏂規硶鍖呭惈鍦╡xtremecomponents.js鏂囦歡涓紝灝嗙殑鍒版墍鏈夌殑form鍙傛暟銆備綘闇瑕佷紶鍏ヤ竴涓?form id鐨勫弬鐓с傝浣忥紝eXtremeTable鏈川涓婃槸涓涓猣orm緇勫緩錛宼ableid浣滀負form id浣跨敤銆傞粯璁ょ殑tableId涓篹c錛屼絾鏄綘閫氬父鎯寵璁劇疆tableId錛屼互紺哄ぇ瀹惰兘鏇村鏄撻槄璇諱綘鐨勪唬鐮併備綘灝嗕嬌鐢╬arameterMap璋冪敤 POJO鐨刧etTable鏂規硶銆俿howTable鏄竴涓猚allback鍛婅瘔DWR褰撲粠getTable()鏂規硶榪斿洖鏃跺皢璋冪敤浠涔堟搷浣溿?
緇撹
鏈寚鍗楁弿榪頒簡鍦╡XtremeTable涓嬌鐢ˋJAX鎵闇瑕佺殑姝ラ銆傞渶瑕佺暀蹇冪殑涓涓富瑕佷簨鎯呮槸娌℃湁鍜孉JAX鍙戠敓瀹為檯鏁村悎銆傚綋琛ㄧ殑actions 琚嬌鐢ㄦ槸錛屼綘鍙渶瑕佺畝鍗曞湴鍛婅瘔eXtremeTable浠涔坖avascript灝嗚璋儁ong銆傚彟涓涓簨鎯呮槸錛岄氳繃鏈ず渚嬫垜浠彲浠ョ煡閬揇WR宸ュ叿鍖呬嬌鐢?POJOs騫惰兘澶熺畝鍗曞湴琚換浣曟鏋朵嬌鐢ㄣ?

|