只需要:
opener+函數+隱藏域 即可,這里的函數和隱藏域都是父窗口的。
比如說,子窗口要取父窗口的數據,可以在父窗口中做一個隱藏域,打開子窗口前把值存儲好,再寫一個函數來取得隱藏域中的值,子窗口中就能用opener+函數名來取得這個值了。
反過來,父窗口要取子窗口的數據,可以在父窗口中做一個函數,子窗口中數據就緒后直接opener+函數名調用這個函數即可,參數就是數據。
這樣做,省去了很多麻煩。如果隱藏域不允許,那么再考慮別的方法不遲。
當柳上原的風吹向天際的時候...真正的快樂來源于創造 |
網絡上有很多網頁父子窗口通信的文章,自己也曾寫過,現在看來,問題應該簡單化了,沒有那么復雜。
只需要: opener+函數+隱藏域 即可,這里的函數和隱藏域都是父窗口的。 比如說,子窗口要取父窗口的數據,可以在父窗口中做一個隱藏域,打開子窗口前把值存儲好,再寫一個函數來取得隱藏域中的值,子窗口中就能用opener+函數名來取得這個值了。 反過來,父窗口要取子窗口的數據,可以在父窗口中做一個函數,子窗口中數據就緒后直接opener+函數名調用這個函數即可,參數就是數據。 這樣做,省去了很多麻煩。如果隱藏域不允許,那么再考慮別的方法不遲。
通常的網頁編程原則是把形式,內容和表現分開,這樣頁面組件的事件處理就轉移到了
window.onload或是Dom.onready中,寫在一起。 有時,如果對頁面組建進行刪除或是更改id,會導致js出現錯誤,找不到組件,結果下面的正確js也無法執行了。 在進行頁面調整階段這個問題很常見。 當然,修改過來是正確的做法,另外我們還可以通過組件檢測來做,這樣的好處是頁面調整后,js無需改變。 以下代碼供參考: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> </head> <body> <button id="btn1">BTN1</button> <br/> <button id="btn2">BTN2</button> </body> </html> <script type="text/javascript"> <!-- if(document.getElementById("btn1")){ document.getElementById("btn1").onclick=function(){ alert(1); }; } if(document.getElementById("btn2")){ document.getElementById("btn2").onclick=function(){ alert(2); }; } //--> </script> <html> <head> <title>123</title> <style> </style> </head> <body> <div>123</div> <div>456</div> <script> function test(object){ var tag = object.innerHTML; alert(tag) } var divs = document.getElementsByTagName('div'); for(var i = 0, len = divs.length; i < len; i++){ divs[i].onclick = function(){ test(this) } } </script> </body> </html> ApplicationContext context=ContextLoader.getCurrentWebApplicationContext(); 當Spring啟動起來后,取得上下文可以如此處理,上述代碼適宜放在靜態構造子中,然后將值傳給一個靜態變量。
在Web程序中,url重寫后后會出現CSS失效的情況,即頁面元素都在,但給它們加上的樣式都無效了。
原因: 一般是加載CSS文件的路徑在翻頁后處于錯誤的位置,這時可以用FireFox打開網頁,查看網頁源碼,再點擊CSS下方的鏈接,看是否能鏈接到CSS文件,鏈接不到是報錯的。 處置: 在html開始前加上如下代碼: <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <base href="<%=basePath%>"> <title>XXX</title> </head> 接下來其它的CSS,JS,IMG寫好相對地址就好了。
工程下載:本工程適用于MyEclipse
WAR文件下載:本War已經與WAS6.1測試過 一些重要的代碼: appctx.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="userService" class="com.service.UserService"> </bean> </beans> UserController.java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.domain.User; import com.service.UserService; @Controller @RequestMapping("/user") public class UserController{ @Autowired private UserService userService; @RequestMapping("/register") public ModelAndView createUser(User user){ userService.register(user); ModelAndView mav=new ModelAndView(); mav.setViewName("registerOk"); mav.addObject(user); return mav; } @RequestMapping("/login") public ModelAndView login(User user){ userService.login(user); ModelAndView mav=new ModelAndView(); mav.setViewName("loginOk"); mav.addObject(user); return mav; } } User.java package com.domain;public class User{ private String userName; private String userPswd; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPswd() { return userPswd; } public void setUserPswd(String userPswd) { this.userPswd = userPswd; } } UserService.java spring-servlet.xmlpackage com.service; import com.domain.User; public class UserService{ public boolean login(User user){ return true; } public boolean register(User user){ return true; } } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:annotation-config /> <!-- 掃描 com.controller下標記了@Controller注解的類 --> <context:component-scan base-package="com.controller" /> <!-- 啟動Spring MVC的注解功能,完成請求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 視圖名稱解析器 p:prefix前綴是路徑,p:suffix是擴展名--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp" /> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8" /> </beans> web.xml <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>SpringMVCSample01</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:appctx.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> </web-app> login.jsp loginOk.jsp<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登錄頁面</title> </head> <body> 登錄<br/> <form method="post" action="<c:url value="/user/login.html"/>"> <input type="text" name="userName"/><br/> <input type="password" name="userPswd"/><br/> <input type="submit" name="提交"> </form> </body> </html> <%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登錄成功頁面</title> </head> <body> 用戶${user.userName}登錄成功 </body> </html>
時不時有人說ImSample下載失效了,搞了個新地址,有要的自己去下載吧。
http://www.aygfsteel.com/Files/heyang/IMSample2012-4-11.rar
摘要: IBM GDC DL Teambiz后臺開發規范 (2012年3月9日修訂版) 撰寫:何楊 2012年3月9日 &nb... 閱讀全文
Teambiz中前臺開發規范
作者:何楊 撰寫日期:2012年3月9日 版本:1.00 更新日期:
第一部分:規范目的 為了提高團隊協作效率, 提高前臺頁面文件的可讀性,可維護性和一致性,從而方便前后臺人員維護管理, 輸出高質量的文檔, 特制訂此文檔. 本規范文檔一經討論確認, 前端開發人員必須按本文檔規范進行前臺頁面開發. 如在執行過程中,文檔確有不合時宜的地方,可及時提出, 經會議討論后決定可以更改此文檔后再執行。 第二部分:基本準則 符合web標準, 語義化html, 結構表現行為分離, 兼容性優良. 頁面性能方面, 代碼要求簡潔明了有序, 盡可能的減小服務器負載, 保證最快的解析速度. 程序員應該書寫項目組所有人都可以看的懂的代碼. 簡潔易懂是一種美德. 在你們編寫程序時必須時刻為用戶著想, 為服務器著想. 第三部分:前臺分離制度 我們認為,前臺頁面混亂的根源之一在于一個頁面擔負了太多的任務。因此,必須把頁面的結構,樣式,行為三部分解構開來,這三部分的命名如下:
第四部分:JSP文件書寫規范 1. 文檔類型聲明及編碼: 統一為html5聲明類型<!DOCTYPE html>; 編碼統一為<meta charset="utf-8" />, 書寫時利用IDE實現層次分明的縮進; 2. 非特殊情況下樣式文件必須外鏈至<head>...</head>之間;非特殊情況下JavaScript文件必須外鏈至頁面底部; 3. 引入樣式文件或JavaScript文件時, 須略去默認類型聲明, 寫法如下: <link rel="stylesheet" href="..." /> <style>...</style>
<script src="..."></script> 4. 所有編碼均遵循xhtml標準, 標簽 & 屬性 & 屬性命名 必須由小寫字母及下劃線數字組成, 且所有標簽必須閉合, 包括br (<br />), hr(<hr />)等; 屬性值必須用雙引號包括; 5. 充分利用無兼容性問題的html自身標簽, 比如span, em, strong, optgroup, label,等等; 需要為html元素添加自定義屬性的時候, 首先要考慮下有沒有默認的已有的合適標簽去設置, 如果沒有, 可以使用須以"data-"為前綴來添加自定義屬性,避免使用"data:"等其他命名方式; 6.結構化JSP,示例如下 <div id=”mainMenu”> <ul> <li><a href=”#”>首頁</a></li> <li><a href=”#”>介紹</a></li> <li><a href=”#”>服務</a></li> </ul> </div> 很多編譯器提供了格式化的工具對代碼整形,希望多加利用.如果機器整形效果不如手動整形,請進行手動整形. 6. 盡可能減少冗余的div嵌套, 如<div class="box"><div class="welcome">歡迎訪問XXX, 您的用戶名是<div class="name">用戶名</div></div></div>完全可以用以下代碼替代: <div class="box"><p>歡迎訪問XXX, 您的用戶名是<span>用戶名</span></p></div>; 9. 書寫鏈接地址時, 必須避免重定向,例如:, 即須在URL地址后面加上“/”; 10. 在頁面中盡量避免使用style屬性,即style="…"; 如果需要初始化某元素的style屬性,請在CSS中設置或是在JS函數window.onload中設置。 11. 能以背景形式呈現的圖片, 盡量寫入css樣式中; 12. 給區塊代碼及重要功能(比如表格展現)加上注釋, 方便后臺添加功能; 第四部分:CSS文件書寫規范 1. 文件編碼統一為utf-8; 2.結構化CSS,如下 html,body { height:100%; margin:0px; font-size:12px; } body{ margin-top: 5px; margin-bottom: 5px; margin-left: 5px; margin-right: 5px; text-align: center; font-size: 12px; font-family:"宋體","Tahoma"; background:#ffffff; overflow-y:hidden; } img{ border:0px; } #header{ margin:0px; padding:0px; border:0px solid #00ff00; width:100%; height:75px; overflow:hidden; } 2. 協作開發及分工: 架構師會根據各個模塊, 同時根據頁面相似程序, 事先寫好大體框架文件, 分配給前端人員實現內部結構&表現&行為; 共用css文件style.css由架構師書寫, 協作開發過程中, 每個頁面請務必都要引入,此文件不可隨意修改; 3. class與id的使用: id是唯一的并是父級的, class是可以重復的并是子級的, 所以id僅使用在大的模塊上, class可用在重復使用率高及子級中; 4. class與id命名:命名要語義化,簡明化,盡量使用簡易的單詞組合; 避免使用中文拼音,以下是約定俗成的一些命名例子,請多加利用:
常用類的命名應盡量以常見英文單詞為準,做到通俗易懂,并在適當的地方加以注釋。對于二級類/ID命名,則采用組合書寫的模式,后一個單詞的首字母應大寫:諸如“搜索框”則應命名為“searchInput”、“搜索圖標”命名這“searchIcon”、“搜索按鈕”命名為“searchBtn”。 5. css屬性書寫順序, 建議遵循 布局定位屬性-->自身屬性-->文本屬性-->其他屬性. 此條可根據自身習慣書寫, 但盡量保證同類屬性寫在一起. 屬性列舉: 布局定位屬性主要包括: margin & padding?。Αloat(包括clear)?。Αosition(相應的 top,right,bottom,left)?。Αisplay & visibility & overflow等; 自身屬性主要包括: width & height & background & border; 文本屬性主要包括: font?。Αolor?。Αext-align?。Αext-decoration?。Αext-indent等;其他屬性包括: list-style(列表樣式)?。Αertical-vlign?。Αursor?。Α-index(層疊順序) ?。Αoom等. 我所列出的這些屬性只是最常用到的, 并不代表全部; 6. 書寫代碼前, 考慮并提高樣式重復使用率; 7. 充分利用html自身屬性及樣式繼承原理減少代碼量, 比如: <ul class="list"><li>這兒是標題列表<span>2010-09-15</span></ul> 定義 ul.list li{position:relative} ul.list li span{position:absolute; right:0} 即可實現日期居右顯示. 8. 必須為大區塊樣式添加注釋, 小區塊適量注釋; 9. 代碼縮進與格式: 建議單行書寫; 第五部分:JS文件書寫規范 1. 文件編碼統一為utf-8, 書寫過程過, 每行代碼結束必須有分號; 原則上所有功能均根據XXX項目需求原生開發, 以避免網上down直接宕下來的代碼造成的代碼污染; 2. 庫引入: 原則上僅引入prototype庫, 若需引入第三方庫, 須與團隊其他人員討論決定; 3. 變量命名: 駝峰式命名. 原生JavaScript變量要求是純英文字母, 首字母須小寫, 如counter;另, 要求變量集中聲明, 避免全局變量. 4. 類命名: 首字母大寫, 駝峰式命名. 如 Counter; 5. 函數命名: 首字母小寫駝峰式命名. 如add(count); 6. 命名語義化, 盡可能利用英文單詞或其縮寫; 7. 后期優化中, JavaScript非注釋類中文字符須轉換成unicode編碼使用, 以避免編碼錯誤時亂碼顯示; 8. 代碼結構明了, 加適量注釋. 提高函數重用率; 第六部分:注釋規范 1. html注釋: 注釋格式 <!--這兒是注釋-->, '--'只能在注釋的始末位置,不可置入注釋文字區域; 2. css注釋: 注釋格式 /*這兒是注釋*/; 3. JavaScript注釋, 單行注釋使用'//這兒是單行注釋' ,多行注釋使用 /* 這兒有多行注釋 */;示例: /***************************************************** * 將數組arr轉化成為tableDatas * 此舉是為了更方便解析數據 * 何楊,2012年2月7日14:03:43 *****************************************************/ function getTableDatasFromArr(arr){ var tableDatas=new Array(); // 遍歷這個數組 for(var i=0;i<arr.length;i++){ var node=arr[i]; var arr2=new Array(); for(var j=0;j<node.childNodes.length;j++){ var child=node.childNodes.item(j); arr2.push(child.childNodes[0].nodeValue); } // 向表格中添加行 tableDatas.push(arr2); } return tableDatas; } |