??xml version="1.0" encoding="utf-8" standalone="yes"?>
<a href="#" onclick="page('a.html')">a面</a><a href="#" onclick="page('b.html')">b面</a>
2 a.html //内嵌面
<script language="javascript">
changeHight();
</script>
3. b.html //内嵌面
<script language="javascript">
changeHight();
</script>
4. page.js
function changeHight(){
var iFrm = parent.document.getElementById("mainIframe");
var subWeb = iFrm.contentDocument;
if(subWeb){
if (subWeb.body.scrollHeight>480)
iFrm.height = subWeb.body.scrollHeight+20;
else
iFrm.height=500;
}
if(top.document.frames["mainIframe"].document && window.document.body.scrollHeight!="0"){
parent.document.getElementById("mainIframe").style.height=window.document.body.scrollHeight;
}
if(top.document.frames["mainIframe"].document && window.document.body.scrollHeight=="0"){
parent.document.getElementById("mainIframe").style.height=500;
}
}
function page(page){
document.getElementById("mainIframe").src=page;
}
造成IE,FireFox,Opera中Iframe昄差异原因在于
1.iframe在FireFox中取法ؓ(f)parent.document.getElementById("mainIframe").contentDocument,而在ie,opera中ؓ(f)parent.document.getElementById("mainIframe").document
2.当页面无滚动Ӟwindow.document.body.scrollHeight在IE中能取到QfireFox和Opera中取不到?
<head>
<script language="javascript">
function a(){
window.document.getElementsByName("dx")[0].checked=true;
}
function b(){
window.document.getElementsByName("dx")[0].checked=false;
}
function c(){
window.document.getElementsByName("fx")[0].checked=true;
}
function d(){
window.document.getElementsByName("fx")[0].checked=false;
}
function e(){
for(i=0;i<window.document.getElementsByName("fx").length;i++){
if(!window.document.getElementsByName("fx")[i].checked){
window.document.getElementsByName("fx")[i].checked=true;
}
}
}
function f(){
for(i=0;i<window.document.getElementsByName("fx").length;i++){
if(window.document.getElementsByName("fx")[i].checked){
window.document.getElementsByName("fx")[i].checked=false;
}
}
}
function g(){
window.document.getElementById("lbka")[1].selected=true;
}
function h(){
alert("选择号ؓ(f):"+window.document.getElementById("lbka").selectedIndex + " gؓ(f):" +window.document.getElementById("lbka")[window.document.getElementById("lbka").selectedIndex].value+" 文本gؓ(f):" + window.document.getElementById("lbka")[window.document.getElementById("lbka").selectedIndex].text);
}
function m(){
sel = false;
var val="";
for(i=0;i<window.document.getElementsByName("dx").length;i++){
if(window.document.getElementsByName("dx")[i].checked){
val = window.document.getElementsByName("dx")[i].value;
sel=true;
break;
}
}
if(sel){
alert("单选gؓ(f):"+val);
}else{
alert("请选择文g");
return false;
}
}
function j(){
var sel = false;
var val="";
for(i=0;i<window.document.getElementsByName("fx").length;i++){
if(window.document.getElementsByName("fx")[i].checked){
if(val==""){
val=window.document.getElementsByName("fx")[i].value;
}else{
val = val + "," +window.document.getElementsByName("fx")[i].value;
}
}
}
if(val==""){
alert("请选择文g");
return false;
}else{
alert("复选gؓ(f):"+val);
}
}
</script>
</head>
<body>
<table id="table1" width="100%" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>文g</td>
<td>列表?lt;/td>
<td>单?lt;/td>
<td>复?lt;/td>
</tr>
<tr>
<td>文gA</td>
<td><select name="lbka"><option value="lbka1">文gA1</option><option value="lbka2">文gA2</option></select></td>
<td><input type="radio" name="dx" value="dxa"></td>
<td><input type="checkbox" name="fx" value="fxa"></td>
</tr>
<tr>
<td>文gB</td>
<td><select name="lbkb"><option value="lbkb1">文gB1</option><option value="lbkb2">文gB2</option></select></td>
<td><input type="radio" name="dx" value="dxb"></td>
<td><input type="checkbox" name="fx" value="fxb"></td>
</tr>
<tr>
<td colspan="4">
<a href="#" onclick="a();">单选A选中</a>
<a href="#" onclick="b();">单选A不选中</a>
<a href="#" onclick="c();">复选A选中</a>
<a href="#" onclick="d();">复选A不选中</a>
<a href="#" onclick="e();">复选全?lt;/a>
<a href="#" onclick="f();">复选全不?lt;/a>
<a href="#" onclick="g();">选中列表框文件A2</a>
<a href="#" onclick="h();">取得选中列表框A的?文本</a>
<a href="#" onclick="m();">判断单选选择</a>
<a href="#" onclick="j();">判断复选选择</a>
</td>
</tr>
</table>
</body>
</html>
<head>
<script language="javascript">
function add(){
//取得表格
var table = document.getElementById("table1");
//取得行数;
var num = table.rows.length;
//增加一?br> var newrow1 = table.insertRow(num-1);
var cell1 = newrow1.insertCell();
var cell2 = newrow1.insertCell();
var cell3 = newrow1.insertCell();
var cell4 = newrow1.insertCell();
//增加行元?br> var inputcell2 = document.createElement("<input size='32' name=''>");
cell2.appendChild(inputcell2);
var inputcell4_1 = document.createElement("<input size='32' name=''>");
var inputcell4_2 = document.createElement("<input type='button' value='删除元素'onClick='del(this);'/>");
cell4.appendChild(inputcell4_1);
cell4.appendChild(inputcell4_2);
//h标签昄
frash();
}
function del(obj){
//取得按钮所在行
var i = obj.parentNode.parentNode.rowIndex;
var tab = document.getElementById("table1");
//删除按钮所在行
tab.deleteRow(i-1);
frash();
}
function frash(){
var table = document.getElementById("table1");
var num = table.rows.length;
//计算动态元素个?br> var n = num-2;
for(i=1;i<=n;i++){
//讄标签?br> table.rows[i].cells[0].innerText="元素"+i+"属性A";
//讄属性?br> table.rows[i].cells[1].childNodes[0].setAttribute("name","ysa"+i);
table.rows[i].cells[2].innerText="元素"+i+"属性B";
table.rows[i].cells[3].childNodes[0].setAttribute("name","ysb"+i);
}
}
</script>
</head>
<body>
<table id="table1" width="100%" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>标签1</td>
<td><input name="a"></td>
<td>标签2</td>
<td><input name="b"></td>
</tr>
<tr>
<td colspan="4" align="center"><a href="#" onclick="add();">增加元素</a></td>
</tr>
</table>
</body>
</html>
<head>
<title>***上v市眼病防M心病人结帐费用报?**</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!--media=print q个属性可以在打印时有?->
<style media=print>
.Noprint{display:none;}
.PageNext{page-break-after: always;}
</style>
<style>
body,td,th
{
font-size: 12px;
}
.tdp
{
border-bottom: 1 solid #000000;
border-left: 1 solid #000000;
border-right: 0 solid #ffffff;
border-top: 0 solid #ffffff;
}
.tabp
{
border-color: #000000;
border-collapse:collapse;
}
.NOPRINT {
font-family: "宋体";
font-size: 12px;
}
</style>
<script language="javascript">
var i=0;
function zoomL(){
i++;
document.getElementById("f").style.zoom=1+i/3;
}
function zoomS(){
i--;
document.getElementById("f").style.zoom=1+i/3;
}
</script>
</head>
<body >
<OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0 VIEWASTEXT> </OBJECT>
<input type=button value=打印 onclick="document.all.WebBrowser.ExecWB(6,1)" class="NOPRINT">
<input type=button value=直接打印 onclick="document.all.WebBrowser.ExecWB(6,6)" class="NOPRINT">
<input type=button value=面讄 onclick="document.all.WebBrowser.ExecWB(8,1)" class="NOPRINT">
<input type=button value=打印预览 onclick="document.all.WebBrowser.ExecWB(7,1)" class="NOPRINT">
<input type=button value=攑֤ onclick="zoomL();" class="NOPRINT">
<input type=button value=~小 onclick="zoomS();" class="NOPRINT">
<br/>
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr align="center">
<td colspan="5"><font size="3">上v市眼病防M心病人结帐费用报表(AQ?</font></td>
</tr>
<tr>
<td>汇Mh?5</td>
<td>费用合计 15853.12</td>
<td>l计日期 </td>
<td>制表?023</td>
<td>制表日期Q?004-05-13</td>
</tr>
</table>
<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000" class="tabp" id="f">
<tr>
<td >姓名</td>
<td >住院?lt;/td>
<td >U室</td>
<td >l帐日期</td>
<td >出院日期</td>
<td >费用合计</td>
<td >M交易费用</td>
<td >分类l付费用</td>
<td >非医保交易费</td>
</tr>
<tr>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
</tr>
</table>
<hr align="center" width="90%" size="1" noshade class="NOPRINT" >
<!--分页-->
<div class="PageNext"></div>
<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000" class="tabp">
<tr>
<td >W??lt;/td>
</tr>
<tr>
<td >看到分页了吧</td>
</tr>
<tr>
<td > </td>
</tr>
<tr>
<td > </td>
</tr>
<tr>
<td ><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" >q样的报?
对一般的要求够了?lt;/td>
<td> </td>
</tr>
</table></td>
</tr>
</table>
<table width="780%" border="1" class="Noprint">
<tr>
<td>能不能打?lt;/td>
</tr>
</table>
</body>
</html>
下面是部分代码?br><form name="ajform" action="/da.do" method="post" enctype="multipart/form-data">
<tr><td><input name="a" value=""></td></tr>
<tr><td><input name="b" type="file"></td></tr>
<tr><td><a href="#" onclick="checksubmit();">提交</a></td></tr>
</form>
4.jsp頁面參數和VO進行E定。綁定的Ҏ(gu)為頁面元素name和VO象應H當進行深層ơ的E定時﹐要注意﹐在變量的getҎ(gu)中進行初始化。在servlet2.4容器中可以不用c:out標籤
輸入框綁定﹕<input name="user.name" value = "<c:out value="${loginActionVo.user.name}"/>" type="text" disabled="disabled" size="14" maxlength="14" /></td>
VO為﹕
public class loginActionVo{
private User user;
public User getUser(User user){
if( user == null){
user = new User();
}
return user;
}
}
2 ? “post”方法時
2?? 首先得到command象,如果SessionForm = falseH調用formBackingObjectde創徏
如果SessionForm = true,從request.getSession中得到原command象H然後將command象?br /> Session中刪除?br /> 2?? 然後會創Z個ServletRequestDataBinder象H裡面包括command象H和其他一些屬性?br /> 這個過E將調用initBinder()H可以複寫這個方法初始化數據?br /> 2?? 調用processFormSubmission(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)。有錯誤時返回formview頁面H否則進入successview頁面。這個過E將調用onSubmit(Object command)H必須複寫這個方法放入業務邏輯?br />
3./form.jsp
<%@taglib prefix="spring" uri=">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>Login</title></head>
<body>
<spring:bind path="command.*">
<font color="red"><b>${status.errorMessage}</b></font><br>
</spring:bind>
請入用者名Ep密碼Q?lt;p>
<form name="loginform" action="login.do" method="post">
<spring:bind path="command.username">
名稱 <input type="text" name="${status.expression}" value="${status.value}"/>
<font color="red">${status.errorMessage}</font><br>
</spring:bind>
<spring:bind path="command.password">
密碼 <input type="password" name="${status.expression}" value="${status.value}"/>
<font color="red">${status.errorMessage}</font><br>
</spring:bind>
<input type="submit" value="定"/>
</form>
注意Q入錯誤會再回到這個頁面中?
</body>
</html>
4./index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
begin......
<%
response.sendRedirect("login.do");
%>
</body>
</html>
5./success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri=">
<html>
<head><title>Login Success</title></head>
<body>
<H1><c:out value="用戶名﹕${user}"/></H1>
</body>
</html>
6./WEB-INF/classes/onlyfun/caterpillar/LoginAction.class
package onlyfun.caterpillar;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.*;
public class LoginAction extends SimpleFormController {
private User user;
protected ModelAndView onSubmit(Object command,BindException errors) throws Exception {
LoginForm form = (LoginForm) command;
String username = user.getUsername();
String password = user.getPassword();
if(username.equals(form.getUsername()) &&
password.equals(form.getPassword())) {
return new ModelAndView(this.getSuccessView(),"user", form.getUsername());
}
else {
errors.reject("loginfail", "使用者名E或密碼錯誤");
if(!(username.equals(form.getUsername()))){
errors.rejectValue("username", "error", null, "使用者名E錯?);
}
if(!(password.equals(form.getPassword()))){
errors.rejectValue("password", "error", null, "密碼錯誤");
}
return new ModelAndView(this.getFormView(),errors.getModel());
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
7./WEB-INF/classes/onlyfun/caterpillar/LoginForm.class
package onlyfun.caterpillar;
public class LoginForm {
private String username;
private String password;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
8./WEB-INF/tags/spring.tld
9./WEB-INF/tags/c.tld
10./WEB-INF/classes/onlyfun/caterpillar/User.class
package onlyfun.caterpillar;
public class User {
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
?/span> Java 的世界裡Q要操控 XML Q最單的方法莫過於使用 JDOM 。在這裡我簡單的介紹如何?/span> JDOM 從無到有的徏立一?/span> XML 、當有一?/span> XML file 時,如何這?/span> XML file 讀進程式裡?qing)如何利?/span> JDOM ?/span> XML 透過 XSLT 轉成 HTML ?/span>
JDOM 是由 Brett Mclaughlin ?/span> Jason Hunter R寫Q在 http://www.jdom.org 可免M載?/span>
2.
建立、新增、刪除、?/span>
例 1 展示如何建立、新增、刪除及(qing)輸出一?/span> XML Q每?/span> XML ?/span> JDOM 裡是׃?/span> Document 別代表Q所以一開始我們要?/span> new 一?/span> Document Q在建構 Document 時應指明根節點,如果沒有指明Q在建構應由 setRootElement a定。基本上 XML 都可以化成一個樹狀i構Q所以,在產生根點之後,q根節點開始增加子點,新增的方式是呼叫 Element.addContent 新的節點加入。刪除如果知道是某節點以下的子節點,則可呼叫 Element.getChildren 取得所有子點,再找刪除的點予以刪除?/span>
當徏立好 XML 之後Q通常我們會希望它輸出到檔案, JDOM 提供?/span> XMLOutputter 別供我們Z用,輸出前要先設定編方式,不然Q會?/span> UTF-8 為預a| setNewlines 則是指明輸出時是否要q我們斷行,方便pQ如果沒有加這行指o(h)Q預a是不會斯Q那麼所有資料將在同一行上?/span>
===== 例 1 =====
import org.jdom.*;
import org.jdom.output.*;
import java.io.*;
import java.util.List;
public class myCreate {
public myCreate() {
String[] strChapter = { "XML 論 ", " R寫 XML", " 剖析 XML", " 約制 XML", " 驗正 XML", " 轉換 XML" };
Element elmtRoot = new Element("Article");
Document docJDOM = new Document(elmtRoot);
// 新增
for(int i=0; i<6; i++) {
Element elmtChapter = new Element("Chapter");
elmtChapter.addContent(strChapter[i]);
elmtChapter.setAttribute("sort", new Integer(i).toString());
elmtRoot.addContent(elmtChapter);
}
// 刪除
List lstChapter = elmtRoot.getChildren("Chapter");
lstChapter.remove(4);
// 輸出
OutputXML(docJDOM, "e:/myJDOM.xml");
}
private void OutputXML(Document docXML, String strFilename) {
XMLOutputter fmt = new XMLOutputter();
try {
fmt.setEncoding("big5");
fmt.setNewlines(true);
FileWriter fwXML = new FileWriter(strFilename);
fmt.output(docXML, fwXML);
fwXML.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
myCreate myCreate1 = new myCreate();
}
}
3.
讀進一?/span>
XML file
目前 XML 最常被拿來應用的領域之一大概是當作a定檔,因此Q如何從檔案中讀入一份已存在?/span> XML 更為重要?/span>
JDOM 是利?/span> SAX ?/span> DOM 來剖?/span> XML Q用 SAX 會比 DOM Q所以一般都是用 SAX Q如果對 SAX 不熟(zhn),?/span> http://www.saxproject.org/ 盔R文g資料?/span>
例 2 是?/span> SAX 建立 Document Q在建立 SAXBuilder 時傳入的參數指出是否?/span> DTD 驗正 XML 的合法性, true 表示要, false 表示不要。當呼叫 build 之後 JDOM 已E幫我們用 SAX 建立好一?/span> XML Tree Q如此我們就可以很方便由 Tree 中找到我們要的節點?/span>
===== 例 2 =====
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import java.io.*;
import java.util.List;
public class myRead {
public myRead() {
Document docJDOM;
// 利用 SAX 建立 Document
SAXBuilder bSAX = new SAXBuilder(false);
try {
docJDOM = bSAX.build(new File("e:/myJDOM.xml"));
}
catch (JDOMException e) {
e.printStackTrace();
return;
}
// 在根點中加入一個新的子?/span>
Element elmtRoot = docJDOM.getRootElement();
Element elmtChapter = new Element("Chapter");
elmtChapter.setText(" 驗正 XML");
elmtChapter.setAttribute("sort", "4");
elmtRoot.addContent(elmtChapter);
// 印出所有根點的子節?/span>
List lstChildren = elmtRoot.getChildren("Chapter");
for(int i=0; i<lstChildren.size(); i++) {
Element elmtChild = (Element) lstChildren.get(i);
System.out.println("Child " + i);
System.out.println(" Text:" + elmtChild.getText());
System.out.println(" Attribute:" + elmtChild.getAttributeValue("sort"));
}
// 輸出到檔?/span>
OutputXML(docJDOM, "e:/myJDOM2.xml");
}
private void OutputXML(Document docXML, String strFilename) {
XMLOutputter fmt = new XMLOutputter();
try {
fmt.setEncoding("big5");
fmt.setNewlines(true);
FileWriter fwXML = new FileWriter(strFilename);
fmt.output(docXML, fwXML);
fwXML.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
myRead myRead1 = new myRead();
}
}
4.
轉換
XML
?/span>
HTML
要將 XML 轉成 HTML 當然要先寫好 XSL Q但是即使寫?/span> XSL Q?/span> JDOM 也並不提?/span> XML 轉換Q幸好在 JDOM 安裝好之後,會?/span> Apache ?/span> Xalan Q它可以q我們做這樣的轉換?/span>
要?/span> Apache ?/span> Xalan Q首先確?/span> xalan.jar ?/span> classpath 裡?/span> Xalan 的第一個用法是在命令列埯Q指令如下?/span>
C:\> java org.apache.xalan.xslt.Process –IN XML 文g –XSL XSL 樣版 –OUT 輸出檔名
命o(h)列的用法在一般的運用裡是很方便,但是我們有興趣的是在程式裡怎麼用。範?/span> 4 提供了一個簡單的 sample ?/span>
===== 例 4 =====
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.stream.*;
public class myGenHTML {
public myGenHTML(String strXML, String strXSL, String strHTML) {
try {
GenHTML(strXML, strXSL, strHTML);
}
catch (TransformerConfigurationException e) {
e.printStackTrace();
}
catch (TransformerException e) {
e.printStackTrace();
}
}
private void GenHTML(String strXMLFile, String strXSLFile, String strHTMLFile) throws TransformerConfigurationException, TransformerException
{
TransformerFactory myFactory = TransformerFactory.newInstance();
Transformer myTransformer = myFactory.newTransformer(new StreamSource(strXSLFile));
myTransformer.transform(new StreamSource(strXMLFile), new StreamResult(strHTMLFile));
}
public static void main(String[] args) {
myGenHTML myGenHTML1 = new myGenHTML(args[0], args[1], args[2]);
}
}
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.*;
public class LoginAction extends SimpleFormController {
protected ModelAndView onSubmit(Object command) throws Exception {
LoginForm form = (LoginForm) command;
if("111".equals(form.getUsername()) &&
"111".equals(form.getPassword())) {
return new ModelAndView(this.getSuccessView(),"user", form.getUsername());
}
else {
return new ModelAndView(this.getFormView());
}
}
}
4./WEB-INF/classes/onlyfun/caterpillar/LoginForm.class
package onlyfun.caterpillar;
public class LoginForm {
private String username;
private String password;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
5./form.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>Login</title></head>
<body>
請入用者名Ep密碼Q?lt;p>
<form name="loginform" action="login.do" method="post">
名稱 <input type="text" name="username"/><br>
密碼 <input type="password" name="password"/><br>
<input type="submit" value="定"/>
</form>
注意Q入錯誤會再回到這個頁面中?
</body>
</html>
6./success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>Login Success</title></head>
<body>
<H1> Hello, ${user}!!</H1>
This is your secret gift.
</body>
</html>
import java.io.IOException;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.RequestUtils;
public class HelloUserAction implements Controller {
private String helloWord;
private String viewPage;
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//String user = RequestUtils.getRequiredStringParameter(req, "user");
Map model = new HashMap();
model.put("helloWord", getHelloWord());
// model.put("user", user);
return new ModelAndView(getViewPage(), model);
}
public void setViewPage(String viewPage) {
this.viewPage = viewPage;
}
public String getViewPage() {
return viewPage;
}
public void setHelloWord(String helloWord) {
this.helloWord = helloWord;
}
public String getHelloWord() {
return helloWord;
}
}
jsEvent.EventRouter.prototype.notify = function(e){
var lsnrs = this.lsnrs;
for(var i=0;i<lsnrs.length;i++){
var lsnr = lsnrs[i];
lsnr.call(this,e);
}
};
jsEvent.EventRouter.callback=function(event){
var e = event || window.event;
var router = this.eventRouter;
router.notify(e);
};
Array.prototype.append = function(obj,nodup){
if(nodup){
this[this.length]=obj;
}
};
2.mousemat.css
.mousemat{
background-color:#ffe0d0;
border:solid maroon 0px;
position:absolute;
margin:0px;
width:500px;
height:500px;
top:50px;
left:50px;
}
.thumbnail{
background-color:#ffe0d0;
border:solid maroon 0px;
position:absolute;
margin:0px;
width:100px;
height:100px;
top:50px;
left:600px;
}
.cursor{
background-color:blue;
position:relative;
height:5px;
width:5px;
}
3.mousemat.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<link rel='stylesheet' type = 'text/css' href = 'mousemat.css'>
<script type ='text/javascript' src = 'EventRouter.js'></script>
<script type='text/javascript'>
var cursor = null;
window.onload = function(){
var mat = document.getElementById('mousemat');
cursor = document.getElementById('cursor');
var mouseRouter = new jsEvent.EventRouter(mat,"onmousemove");
//var mouseRouter = new jsEvent.EventRouter(mat,"onclick");
mouseRouter.addListener(writeStatus);
mouseRouter.addListener(drawThumbnail);
};
function writeStatus(e){
window.status = e.clientX + "," + e.clientY;
}
function drawThumbnail(e){
cursor.style.left = ((e.clientX/5)-2) + "px";
cursor.style.top = ((e.clientY/5)-2) + "px";
}
</script>
</head>
<body>
<div class='mousemat' id='mousemat'></div>
<div class='thumbnail' id='thumbnail'>
<div class = 'cursor' id = 'cursor'></div>
</div>
</body>
</html>
function load(){
var domEl = document.getElementById('b1');
JsButton(value,domEl);
}
function JsButton(value,domEl){
this.domEl = domEl;
this.value = value;
this.domEl.buttonObj = this;
//this.domEl.onclick = function(){
//alert(this.value);
//}
this.domEl.onclick = JsButton.prototype.clickHandler;
}
JsButton.prototype.clickHandler = function(){
//alert(this.value); 在回調函怸調用this屬性時H?br /> //得到的是應的DOM元素裡面的數|此處為空?br /> var buttonObj = this.buttonObj;
var value =(buttonObj && buttonObj.value)? buttonObj.value:"unknown value";
alert(value);
}
function makeKeyboard(el){
for(var i=0;i<notes.length;i++){
var key=document.createElement("DIV");
key.className = notes[i] + " musicalButton";
alert(key.className);
key.note = notes[i];
key.onclick = playNote;
el.appendChild(key);
}
}
function playNote(event){
var note = this.note;
var console = document.getElementById('console');
if(note && console){
console.innerHTML +=note + ".";
}
}
function playNote(event){
var note = this.note;
var console = document.getElementById("console");
if(note && console){
console.innerHTML += note + ".";
}
}
2Q? R碼方式的簡?br /> String序列化成byte數組或反序列化時需要選擇正的R碼方式。如果編方式不正確Q就會得C?x3F的倹{常用的字符R碼方式有ISO8859_1、GB2312、GBK、UTF-8/UTF-16/UTF-32?br />ISO8859_1用來R碼拉丁文,它由單字Q?Q?55Q組成?br /> GB2312、GBK用來R碼體中文Q它有單字節和雙字節混合i成。最高位?的字和下一個字構成一個字,最高位?的字是ASCII{?br /> UTF-8/UTF-16/UTF-32是國際標準UNICODE的編方式?用得最多的是UTF-8Q主要是因為它在拉丁文R碼時節約空間?/p>
UNICODE?UTF-8R碼
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
三、J2SE中相關的函數
String str =”英?
//取得GB2312R碼的字
byte[] bytesGB2312 = str.getBytes(“GB2312?;
//取得q~省R碼的字(solaris為ISO8859_1,windows為GB2312)
byte[] bytesDefault = str.getBytes();
//用指定的R碼字轉換成字W串
String newStrGB = new String(bytesGB2312, “GB2312?;
//用^臺缺省的R碼字轉換成字W串(solaris為ISO8859_1,windows為GB2312)
String newStrDefault = new String(bytesDefault);
//用指定的R碼從字裏面讀取字W?br />InputStream in = xxx;
InputStreamReader reader = InputStreamReader( in, “GB2312?;
char aChar = reader.read();
四、JSP、數據n的編?br />4Q? JSP中的R碼
(1) 靜態聲明:
CHARSET有兩個作用:(x)
JSP文g的編方式:(x)在讀取JSP文g、生成JAVA時Q源JSP文g中字的R碼
JSP輸出的R碼方式Q在埯JSP時,往response裏面寫入數據的R碼方式
(2) 動態改變:在往response裏面寫數據前可以調用response.setContentType()Q設定正的R碼型?br />(3) 在TOMCAT中,由Request.getParameter() 得到的參數,R碼方式都是ISO8859_1。所以如果在瀏覽器入框內入一個字“英”,在伺服器端就得到一個ISO8859_1R碼的(0x00,0xD3,0x00,0xA2Q。所以通常在接收參數時轉碼Q?br />String wrongStr = response.getParameter(“name?;
String correctStr = new String(wrongStr.getBytes(“ISO8859_1?,”GB2312?;
在最新的SERVLET規範裏面Q也可以在獲取參怹前執行如下代|(x)
request.setCharacterEncoding(“GB2312?;
4Q? 數據庫的R碼
(1) 數據庫用UTF-16
如果String中是UNICODE字符Q寫入讀出時不需要轉?br />(2) 數據庫用ISO8859_1
如果String中是UNICODE字符Q寫入讀出時需要轉?br />寫入QString newStr = new String(oldStr.getByte(“GB2312?, “ISO8859_1?;
讀出:(x)String newStr = new String(oldStr.getByte(“ISO8859_1?,”GB2312?;
五、源文g的編?br />5Q? 資源文g
資源文g的編方式和R輯q盔R。在WINDOWSq_下編寫的資源文gQ以GB2312方式R碼。在R譯時需要轉|以確保在各個^Z的正性:(x)
native2ascii –encoding GB2312 source.properties
這樣從資源文件中讀出的是正確的UNICODE字符丌Ӏ?br />5Q? 源文?br />源文件的R碼方式和編輯^臺相關。在WINDOWSq_下開發的源文Ӟ以GB2312方式R碼。在R譯的時候,需要指定源文g的編方式:(x)
javac –encoding GB2312
JAVAR譯後生成的字節文g的編為UTF-8?br />
點最新版TOMCAT4.1.18支援request.setCharacterEncoding(String enc)
點資源文件轉成company.name=\u82f1\u65af\u514b
點如果數據n使用utf-16則不需要這部分轉?br />點頁面上應有
轉碼?
String s = new String
(request.getParameter(“name?.getBytes(“ISO8859_1?,”GB2312?;
轉碼?
String s = new String(name.getBytes(“GB2312?,”ISO8859_1?;
轉碼?
String s = new String(name.getBytes(“ISO8859_1?,?GB2312?;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;
public class ExcelReader {
public static void main( StringQ] args ) {
Connection c = null;
Statement stmnt = null;
try {
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
c = DriverManager.getConnection( "jdbc:odbc:Book1", "", "" );
stmnt = c.createStatement();
String query = "SELECT test1 FROM [Sheet1$] WHERE test1='试'";
ResultSet rs = stmnt.executeQuery( query );
System.out.println( "查得匚w'试'的test1的记录ؓ(f):" );
while( rs.next() ) {
System.out.println( rs.getString( "test1" ) );
}
}
catch( Exception e ) {
System.err.println( e );
}
finally {
try {
stmnt.close();
c.close();
}
catch( Exception e ) {
System.err.println( e );
}
}
}
}
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.DriverManager;
public class ExcelReader {
public static void main(StringQ] args){
Connection connection = null;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection( "jdbc:odbc:Book1","","" );
Statement st = con.createStatement();
ResultSet rs = st.executeQuery( "SELECT * FROM [Sheet1$]" );
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
if(i>1) //用逗号分隔各列
System.out.print(", ");
String columnValue = rs.getString(i);
System.out.print(columnValue);
}
System.out.println("");
}
st.close();
con.close();
} catch(Exception ex) {
System.err.print("Exception: ");
System.err.println(ex.getMessage());
}
}
}