dlog_list.jsp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  1. <%@ include file="../common/header.jsp"%>
  2. <%
  3. if (seq==0){
  4. seq = request.getAttribute("dlog_start") == null ? 0 : (Integer) request.getAttribute("dlog_start");
  5. }
  6. %>
  7. <script type="text/javascript" language="javascript"><!--
  8. function loadPageInit() {
  9. doLoadC1();
  10. }
  11. function doLoadC1() {
  12. var form = document.forms.dlog;
  13. try {
  14. var dlogMdCRemovalObj = form.dlogMd_label_filter;
  15. var type = form.dlog_type_filter.value;
  16. var idParam = form.dlogMd_label_filter.value;
  17. var idLabel = form.labelFilter.value;
  18. if (type.length > 0) {
  19. var req = createXMLHttpRequest();
  20. var url = "dlog.do?action=getCList&type=" +type;
  21. var loop = 0;
  22. req.open("GET", url);
  23. req.onreadystatechange = function() {
  24. if (req.readyState == 4) {
  25. dlogMdCRemovalObj.length = 0;
  26. dlogMdCRemovalObj.options[0] = new Option("-- Select DlogMd Label --", "");
  27. document.getElementById("message").innerHTML="";
  28. var response = req.responseText;
  29. if (response) {
  30. var rst = eval("(" + req.responseText + ")");
  31. for(var i=0;i<rst.length;i++){
  32. var dlogMdCId = rst[i].id;
  33. var dlogMdCIdName = rst[i].name;
  34. dlogMdCRemovalObj.options[i+1] = new Option(dlogMdCIdName, dlogMdCId);
  35. if(idParam == dlogMdCId) {
  36. dlogMdCRemovalObj.options[loop+1].selected = true;
  37. }else if(idLabel == dlogMdCId) {
  38. dlogMdCRemovalObj.options[loop+1].selected = true;
  39. }
  40. loop++;
  41. }
  42. } else {
  43. dlogMdCRemovalObj.length = 0;
  44. dlogMdCRemovalObj.options[0] = new Option("-- Select DlogMd Label --", "");
  45. }
  46. } else {
  47. dlogMdCRemovalObj.length = 0;
  48. dlogMdCRemovalObj.options[0] = new Option("-- Select DlogMd Label --", "");
  49. document.getElementById("message").innerHTML="<img src='./images/wait.gif' border=0 >&nbsp;<b>Please Wait...<\/b>";
  50. }
  51. }
  52. req.send(null);
  53. } else {
  54. dlogMdCRemovalObj.length = 0;
  55. dlogMdCRemovalObj.options[0] = new Option("-- Select DlogMd Label --", "");
  56. }
  57. } catch(e) {
  58. alert(e);
  59. }
  60. }
  61. /* ==== TIME FILTER: hanya 1 tanggal yang boleh dipilih (max 1 hari), tapi start time
  62. dan end time (jam:menit) dalam tanggal itu tetap bisa diatur user.
  63. End date selalu disamakan dengan start date (tidak ada input end date terpisah). ==== */
  64. function syncTimestampFilter(){
  65. var form = document.forms.dlog;
  66. form.dlog_timestamp_end_filter.value = form.dlog_timestamp_start_filter.value;
  67. }
  68. /* ==== CR#2: tandai bahwa user benar-benar melakukan aksi (search/page/order/reset),
  69. supaya initial load tidak query ke tabel DLOG ==== */
  70. function markSearch(){
  71. document.forms.dlog.doSearch.value = "true";
  72. }
  73. function page(start, count){
  74. syncTimestampFilter();
  75. markSearch();
  76. document.forms.dlog.start.value=start;
  77. document.forms.dlog.count.value=count;
  78. document.forms.dlog.action.value="list";
  79. document.forms.dlog.submit();
  80. doDisable(document.forms.dlog, "button");
  81. }
  82. function doChangePage(count){
  83. syncTimestampFilter();
  84. markSearch();
  85. document.forms.dlog.start.value= (document.forms.dlog.startx.value-1)*20;
  86. if(document.forms.dlog.start.value=="NaN") document.forms.dlog.start.value = 0;
  87. document.forms.dlog.count.value=count;
  88. document.forms.dlog.action.value="list";
  89. document.forms.dlog.submit();
  90. doDisable(document.forms.dlog, "button");
  91. }
  92. function fillIndex(val){
  93. document.forms.dlog.startx.value = val.value;
  94. }
  95. function handleEvent(oEvent) {
  96. var arrKeys = [];
  97. if (oEvent.shiftKey) {
  98. arrKeys.push("Shift");
  99. }
  100. }
  101. function doDetail(id){
  102. //alert("My world is full :-)".wordWrap(10, "\n+", true));
  103. //document.forms.dlogDetail.target="_blank";
  104. document.forms.dlog.id.value=id;
  105. document.forms.dlog.action.value="detail";
  106. //handleEvent(event);
  107. document.forms.dlog.submit();
  108. }
  109. function doFilter(){
  110. syncTimestampFilter();
  111. markSearch();
  112. document.forms.dlog.start.value=0;
  113. document.forms.dlog.action.value="list";
  114. document.forms.dlog.submit();
  115. doDisable(document.forms.dlog, "button");
  116. }
  117. function doReset(){
  118. document.forms.dlog.dlog_type_filter.value="";
  119. document.forms.dlog.dlog_source_filter.value="";
  120. document.forms.dlog.dlog_source_sma.value="equal";
  121. document.forms.dlog.dlog_code_filter.value="";
  122. document.forms.dlog.dlog_code_sma.value="equal";
  123. document.forms.dlog.dlog_value_filter.value="";
  124. document.forms.dlog.dlogMd_label_filter.value="";
  125. document.forms.dlog.dlogMd_sma.value="equal";
  126. document.forms.dlog.dlog_timestamp_start_filter.value="";
  127. document.forms.dlog.dlog_timestamp_hour_start_filter.value="0";
  128. document.forms.dlog.dlog_timestamp_minute_start_filter.value="0";
  129. document.forms.dlog.dlog_timestamp_end_filter.value="";
  130. document.forms.dlog.dlog_timestamp_hour_end_filter.value="23";
  131. document.forms.dlog.dlog_timestamp_minute_end_filter.value="59";
  132. document.forms.dlog.clear.value="true";
  133. document.forms.dlog.action.value="list";
  134. /* CR#2: reset tetap dianggap aksi user -> boleh query (biar user lihat data ter-reset).
  135. Kalau reset juga TIDAK boleh query, hapus baris markSearch() di bawah ini. */
  136. markSearch();
  137. document.forms.dlog.submit();
  138. doDisable(document.forms.dlog, "button");
  139. }
  140. function doOrder(field, type){
  141. syncTimestampFilter();
  142. markSearch();
  143. document.forms.dlog.dlog_fieldOrder.value=field;
  144. document.forms.dlog.dlog_orderType.value=type;
  145. document.forms.dlog.action.value="list";
  146. document.forms.dlog.submit();
  147. doDisable(document.forms.status, "button");
  148. }
  149. String.prototype.wordWrap = function(m, b, c){
  150. var i, j, s, r = this.split("\n");
  151. if(m > 0) for(i in r){
  152. for(s = r[i], r[i] = ""; s.length > m;
  153. j = c ? m : (j = s.substr(0, m).match(/\S*$/)).input.length - j[0].length || m,r[i] += s.substr(0, j) + ((s = s.substr(j)).length ? b : ""));
  154. r[i] += s;
  155. }
  156. return r.join("\n");
  157. }
  158. --></script>
  159. <!-- CONTENT -->
  160. <form name="dlog" method="post" action="dlog.do" target="_self">
  161. <input type="hidden" name="start" value="">
  162. <input type="hidden" name="startx" value="">
  163. <input type="hidden" name="action" value="">
  164. <input type="hidden" name="clear" value="">
  165. <input type="hidden" name="count" value="">
  166. <input type="hidden" name="id" value="">
  167. <input type="hidden" name="doSearch" value="">
  168. <input type="hidden" name="dlog_fieldOrder" value="<bean:write name="dlog_fieldOrder"/>">
  169. <input type="hidden" name="dlog_orderType" value="<bean:write name="dlog_orderType"/>">
  170. <input type="hidden" name="labelFilter" value="<logic:notEmpty name="dlogMd_label_filter"><bean:write name="dlogMd_label_filter" /></logic:notEmpty>">
  171. <input type="hidden" name="focus_field" value=""/>
  172. <!--td width="80%" valign="top"-->
  173. <table width="100%" border="0" align="center" cellpadding="2" cellspacing="4">
  174. <tr>
  175. <td class="titleHeader"><bean:message key="project.dlog.key"/> - LIST</td>
  176. </tr>
  177. <tr><td><html:errors /></td></tr>
  178. <logic:notEmpty name="paging">
  179. <tr>
  180. <td><%@ include file="../common/paging.jsp"%></td>
  181. </tr>
  182. </logic:notEmpty>
  183. </table>
  184. <logic:notEmpty name="dlogList">
  185. <table width="100%" border="0" cellspacing="1" cellpadding="1">
  186. <tr>
  187. <td colspan="7">
  188. <div id="message"></div>
  189. </td>
  190. </tr>
  191. <tr>
  192. <td width="5%" class="titleField"><div align="center">#</div></td>
  193. <td align="left" height="10" valign="top" class="titleField"><bean:message key="dlog.type.key" />
  194. <logic:equal name="dlog_fieldOrder" value="typeDmd.type">
  195. <logic:equal name="dlog_orderType" value="ASC">
  196. <a href="#" onclick="doOrder('typeDmd.type', 'DESC');"><img src="./images/arrow_down.gif" border="0" alt=""></a>
  197. </logic:equal>
  198. <logic:equal name="dlog_orderType" value="DESC">
  199. <a href="#" onclick="doOrder('typeDmd.type', 'ASC');"><img src="./images/arrow_up.gif" border="0" alt=""></a>
  200. </logic:equal>
  201. </logic:equal>
  202. <logic:notEqual name="dlog_fieldOrder" value="typeDmd.type">
  203. <a href="#" onclick="doOrder('typeDmd.type', 'ASC');"><img src="./images/arrow.gif" border="0" alt=""></a>
  204. </logic:notEqual>
  205. </td>
  206. <td align="left" height="10" valign="top" class="titleField"><bean:message key="dlog.timestamp.key" />
  207. <logic:equal name="dlog_fieldOrder" value="timestamp">
  208. <logic:equal name="dlog_orderType" value="ASC">
  209. <a href="#" onclick="doOrder('timestamp', 'DESC');"><img src="./images/arrow_down.gif" border="0" alt=""></a>
  210. </logic:equal>
  211. <logic:equal name="dlog_orderType" value="DESC">
  212. <a href="#" onclick="doOrder('timestamp', 'ASC');"><img src="./images/arrow_up.gif" border="0" alt=""></a>
  213. </logic:equal>
  214. </logic:equal>
  215. <logic:notEqual name="dlog_fieldOrder" value="timestamp">
  216. <a href="#" onclick="doOrder('timestamp', 'ASC');"><img src="./images/arrow.gif" border="0" alt=""></a>
  217. </logic:notEqual>
  218. </td>
  219. <td align="left" height="10" valign="top" class="titleField"><bean:message key="dlog.source.key" />
  220. <logic:equal name="dlog_fieldOrder" value="source">
  221. <logic:equal name="dlog_orderType" value="ASC">
  222. <a href="#" onclick="doOrder('source', 'DESC');"><img src="./images/arrow_down.gif" border="0" alt=""></a>
  223. </logic:equal>
  224. <logic:equal name="dlog_orderType" value="DESC">
  225. <a href="#" onclick="doOrder('source', 'ASC');"><img src="./images/arrow_up.gif" border="0" alt=""></a>
  226. </logic:equal>
  227. </logic:equal>
  228. <logic:notEqual name="dlog_fieldOrder" value="source">
  229. <a href="#" onclick="doOrder('source', 'ASC');"><img src="./images/arrow.gif" border="0" alt=""></a>
  230. </logic:notEqual>
  231. </td>
  232. <td align="left" height="10" valign="top" class="titleField"><bean:message key="dlog.code.key" />
  233. <logic:equal name="dlog_fieldOrder" value="code">
  234. <logic:equal name="dlog_orderType" value="ASC">
  235. <a href="#" onclick="doOrder('code', 'DESC');"><img src="./images/arrow_down.gif" border="0" alt=""></a>
  236. </logic:equal>
  237. <logic:equal name="dlog_orderType" value="DESC">
  238. <a href="#" onclick="doOrder('code', 'ASC');"><img src="./images/arrow_up.gif" border="0" alt=""></a>
  239. </logic:equal>
  240. </logic:equal>
  241. <logic:notEqual name="dlog_fieldOrder" value="code">
  242. <a href="#" onclick="doOrder('code', 'ASC');"><img src="./images/arrow.gif" border="0" alt=""></a>
  243. </logic:notEqual>
  244. </td>
  245. <td width="5%" class="titleField">&nbsp;</td>
  246. </tr>
  247. <logic:iterate id="element" name="dlogList" scope="request" indexId="index">
  248. <%
  249. sequence++;
  250. String bgcolor = "FFFFFF";
  251. if(sequence%2 == 0){
  252. bgcolor = "EDEDE8";
  253. }
  254. %>
  255. <tr bgcolor="<% out.print(bgcolor); %>" onmouseover="mOvr(this);" onmouseout="mOut(this, '<% out.print(bgcolor); %>');">
  256. <td align="center" class="celBorder"><%=++seq%>&nbsp;</td>
  257. <td align="left" class="celBorder">
  258. <bean:write name="element" property="typeDmd.type"/>
  259. </td>
  260. <td align="left" class="celBorder">
  261. <logic:notEmpty name="element" property="timestamp">
  262. <bean:write name="element" property="timestamp.time" format="yyyy-MM-dd HH:mm:ss.SSS"/>
  263. </logic:notEmpty>&nbsp;
  264. </td>
  265. <td align="left" class="celBorder">
  266. <bean:write name="element" property="source"/>
  267. </td>
  268. <td align="left" class="celBorder">
  269. <bean:write name="element" property="code"/>
  270. </td>
  271. <td align="center" class="celBorder" id="tdId"><a href="#"><img src="./images/detail.gif" border="0" onclick="doDetail('<bean:write name="element" property="id"/>');" alt="see detail"></a></td>
  272. </tr>
  273. </logic:iterate>
  274. </table>
  275. <table width="100%" border="0" align="center" cellpadding="2" cellspacing="4">
  276. <tr>
  277. <td><%@ include file="../common/paging.jsp"%></td>
  278. </tr>
  279. </table>
  280. </logic:notEmpty>
  281. <logic:empty name="dlogList">
  282. <table width="100%" border="0" align="center" cellpadding="2" cellspacing="4">
  283. <tr>
  284. <td>
  285. <%-- CR#2: bedakan pesan "belum search" vs "sudah search tapi hasilnya kosong",
  286. supaya pencarian valid dengan 0 hasil tidak terlihat seperti belum di-search --%>
  287. <logic:equal name="searched" value="true">
  288. Tidak ada log yang ditemukan untuk filter yang dipilih.
  289. </logic:equal>
  290. <logic:notEqual name="searched" value="true">
  291. Silakan tentukan tanggal dan filter yang diinginkan, lalu klik <b>Search</b>.
  292. </logic:notEqual>
  293. </td>
  294. </tr>
  295. </table>
  296. </logic:empty>
  297. <table width="100%" border="0" align="center" cellpadding="2" cellspacing="4">
  298. <br>
  299. <tr>
  300. <td class="search"><bean:message key="project.search.key" /></td>
  301. </tr>
  302. </table>
  303. <table width="100%" border="0" cellspacing="1" cellpadding="2">
  304. <tr>
  305. <td width="25%"><b><bean:message key="dlog.type.key"/></b></td>
  306. <td width="1%">:</td>
  307. <td width="79%">
  308. <select name="dlog_type_filter" style="width:300" onchange="doLoadC1();">
  309. <option value="">-- Select Type --</option>
  310. <logic:notEmpty name="dlogMdList">
  311. <logic:iterate id="element_dlogMd" name="dlogMdList" >
  312. <option value="<bean:write name="element_dlogMd"/>"
  313. <logic:notEmpty name="dlog_type_filter">
  314. <logic:equal name="dlog_type_filter" value="${element_dlogMd}">
  315. selected
  316. </logic:equal>
  317. </logic:notEmpty>
  318. ><bean:write name="element_dlogMd"/></option>
  319. </logic:iterate>
  320. </logic:notEmpty>
  321. </select>
  322. </td>
  323. </tr>
  324. <tr>
  325. <td width="20%"><b><bean:message key="dlog.timestamp.key"/></b> <span style="font-weight:normal;">(1 hari)</span></td>
  326. <td width="1%">:</td>
  327. <td width="79%">
  328. <input type="text" name="dlog_timestamp_start_filter" value="<logic:notEmpty name="dlog_timestamp_start_filter"><bean:write name="dlog_timestamp_start_filter" format="dd/MM/yyyy" /></logic:notEmpty>" size="12" maxlength="10" readonly="readonly">
  329. <a href="javascript:cal_timestamp_start_filter.popup();"><img alt="cal" src="./images/cal.gif" width="16" height="16" border="0"></a>
  330. <script type="text/javascript" language="javascript">
  331. var cal_timestamp_start_filter = new calendar1(document.forms['dlog'].elements['dlog_timestamp_start_filter']);
  332. </script>
  333. <!-- End date selalu ikut start date (tanggal sama, tidak ada picker terpisah) -->
  334. <input type="hidden" name="dlog_timestamp_end_filter" value="<logic:notEmpty name="dlog_timestamp_start_filter"><bean:write name="dlog_timestamp_start_filter" format="dd/MM/yyyy" /></logic:notEmpty>">
  335. &nbsp;&nbsp;<b>Start:</b>
  336. <select name="dlog_timestamp_hour_start_filter" style="width:55">
  337. <logic:iterate id="hourStartItem" name="hourList">
  338. <option value="<bean:write name="hourStartItem"/>"<logic:equal name="dlog_timestamp_hour_start_filter" value="${hourStartItem}"> selected</logic:equal>><bean:write name="hourStartItem"/></option>
  339. </logic:iterate>
  340. </select> :
  341. <select name="dlog_timestamp_minute_start_filter" style="width:55">
  342. <logic:iterate id="minuteStartItem" name="minuteList">
  343. <option value="<bean:write name="minuteStartItem"/>"<logic:equal name="dlog_timestamp_minute_start_filter" value="${minuteStartItem}"> selected</logic:equal>><bean:write name="minuteStartItem"/></option>
  344. </logic:iterate>
  345. </select>
  346. &nbsp;&nbsp;<b>End:</b>
  347. <select name="dlog_timestamp_hour_end_filter" style="width:55">
  348. <logic:iterate id="hourEndItem" name="hourList">
  349. <option value="<bean:write name="hourEndItem"/>"<logic:equal name="dlog_timestamp_hour_end_filter" value="${hourEndItem}"> selected</logic:equal>><bean:write name="hourEndItem"/></option>
  350. </logic:iterate>
  351. </select> :
  352. <select name="dlog_timestamp_minute_end_filter" style="width:55">
  353. <logic:iterate id="minuteEndItem" name="minuteList">
  354. <option value="<bean:write name="minuteEndItem"/>"<logic:equal name="dlog_timestamp_minute_end_filter" value="${minuteEndItem}"> selected</logic:equal>><bean:write name="minuteEndItem"/></option>
  355. </logic:iterate>
  356. </select>
  357. </td>
  358. </tr>
  359. <tr>
  360. <td width="20%"><b><bean:message key="dlog.source.key"/></b></td>
  361. <td width="1%">:</td>
  362. <td width="79%">
  363. <select name="dlog_source_sma" style="width:100">
  364. <option value="equal"<logic:equal name="dlog_source_sma" value="equal"> selected</logic:equal>>Equal</option>
  365. <option value="not_equal"<logic:equal name="dlog_source_sma" value="not_equal"> selected</logic:equal>>Not Equal</option>
  366. <option value="like"<logic:equal name="dlog_source_sma" value="like"> selected</logic:equal>>Like</option>
  367. <option value="not_like"<logic:equal name="dlog_source_sma" value="not_like"> selected</logic:equal>>Not Like</option>
  368. </select>
  369. <label>
  370. <input type="text" name="dlog_source_filter" value="<logic:notEmpty name="dlog_source_filter"><bean:write name="dlog_source_filter"/></logic:notEmpty>">
  371. </label>
  372. </td>
  373. </tr>
  374. <tr>
  375. <td width="20%"><b><bean:message key="dlog.code.key"/></b></td>
  376. <td width="1%">:</td>
  377. <td width="79%">
  378. <select name="dlog_code_sma" style="width:100">
  379. <option value="equal"<logic:equal name="dlog_code_sma" value="equal"> selected</logic:equal>>Equal</option>
  380. <option value="not_equal"<logic:equal name="dlog_code_sma" value="not_equal"> selected</logic:equal>>Not Equal</option>
  381. <option value="like"<logic:equal name="dlog_code_sma" value="like"> selected</logic:equal>>Like</option>
  382. <option value="not_like"<logic:equal name="dlog_code_sma" value="not_like"> selected</logic:equal>>Not Like</option>
  383. </select>
  384. <label>
  385. <input type="text" name="dlog_code_filter" value="<logic:notEmpty name="dlog_code_filter"><bean:write name="dlog_code_filter"/></logic:notEmpty>">
  386. </label>
  387. </td>
  388. </tr>
  389. <tr>
  390. <td width="20%">
  391. <select name="dlogMd_label_filter" style="width:200" >
  392. <option value="">-- Select DlogMd Label --</option>
  393. <logic:notEmpty name="labelList">
  394. <logic:iterate id="element_dlogMdC" name="labelList" >
  395. <option value="<bean:write name="element_dlogMdC" property="id" />"
  396. <logic:notEmpty name="dlogMd_label_filter">
  397. <logic:equal name="dlogMd_label_filter" value="${element_dlogMdC.id}">
  398. selected
  399. </logic:equal>
  400. </logic:notEmpty>
  401. ><bean:write name="element_dlogMdC" property="name" />
  402. </option>
  403. </logic:iterate>
  404. </logic:notEmpty>
  405. </select>
  406. <select name="dlogMd_sma" style="width:100">
  407. <option value="equal"<logic:equal name="dlogMd_sma" value="equal"> selected</logic:equal>>Equal</option>
  408. <option value="not_equal"<logic:equal name="dlogMd_sma" value="not_equal"> selected</logic:equal>>Not Equal</option>
  409. <option value="like"<logic:equal name="dlogMd_sma" value="like"> selected</logic:equal>>Like</option>
  410. <option value="not_like"<logic:equal name="dlogMd_sma" value="not_like"> selected</logic:equal>>Not Like</option>
  411. </select>
  412. </td>
  413. <td width="1%">:</td>
  414. <td width="79%">
  415. <label>
  416. <input type="text" name="dlog_value_filter" value="<logic:notEmpty name="dlog_value_filter"><bean:write name="dlog_value_filter"/></logic:notEmpty>">
  417. </label>
  418. </td>
  419. <td></tr>
  420. <br>
  421. <tr>
  422. <td>&nbsp;</td>
  423. <td>&nbsp;</td>
  424. <td colspan="3" align="left">
  425. <input type="button" size="50" maxlength="25" value="<bean:message key="button.reset"/>" onclick="doReset();">
  426. &nbsp;&nbsp;
  427. <input type="button" value="<bean:message key="button.search"/>" onclick="doFilter();" >
  428. </td>
  429. <td>&nbsp;</td>
  430. <td>&nbsp;</td>
  431. <td>&nbsp;</td>
  432. </tr>
  433. </table>
  434. </form>
  435. <logic:notEmpty name="dlog_type_filter">
  436. <script type="text/javascript" language="javascript">loadPageInit();</script>
  437. </logic:notEmpty>
  438. <!-- END CONTENT -->
  439. <%@ include file="../common/footer.jsp"%>