﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-chou's blog</title><link>http://www.blogjava.net/chou/</link><description>records of my java learning process </description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 07:52:53 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 07:52:53 GMT</pubDate><ttl>60</ttl><item><title>excel操作</title><link>http://www.blogjava.net/chou/archive/2009/03/10/258909.html</link><dc:creator>chou</dc:creator><author>chou</author><pubDate>Tue, 10 Mar 2009 12:27:00 GMT</pubDate><guid>http://www.blogjava.net/chou/archive/2009/03/10/258909.html</guid><wfw:comment>http://www.blogjava.net/chou/comments/258909.html</wfw:comment><comments>http://www.blogjava.net/chou/archive/2009/03/10/258909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chou/comments/commentRss/258909.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chou/services/trackbacks/258909.html</trackback:ping><description><![CDATA[<p>/**<br />
&nbsp;* Excel WorkBook对象类 <br />
&nbsp;* @author zhouqian<br />
&nbsp;*<br />
&nbsp;*/<br />
public class ExcelWorkBook {<br />
&nbsp;/** 工作簿 */<br />
&nbsp;private static HSSFWorkbook workbook = new HSSFWorkbook();<br />
&nbsp;<br />
&nbsp;/** 工作表 */<br />
&nbsp;private HSSFSheet sheet;<br />
&nbsp;<br />
&nbsp;/** 表头数据 */<br />
&nbsp;private String[] tableHeader;<br />
&nbsp;<br />
&nbsp;/**<br />
&nbsp; * 构造函数<br />
&nbsp; * @param workbookName 工作表名<br />
&nbsp; * @param tableHeader 表头数据<br />
&nbsp; */<br />
&nbsp;public ExcelWorkBook(String workbookName, String[] tableHeader) {<br />
&nbsp;&nbsp;super();<br />
&nbsp;&nbsp;this.tableHeader = tableHeader;<br />
&nbsp;&nbsp;sheet = workbook.createSheet(workbookName);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;/**<br />
&nbsp; * 创建表头<br />
&nbsp; * @param headerName<br />
&nbsp; */<br />
&nbsp;public void createTableHeader(String headerName) {<br />
&nbsp;&nbsp;HSSFHeader header = sheet.getHeader();<br />
&nbsp;&nbsp;header.setCenter(headerName);<br />
&nbsp;&nbsp;HSSFRow headerRow = sheet.createRow(0);<br />
&nbsp;&nbsp;int cellNumber = tableHeader.length;<br />
&nbsp;&nbsp;for (int i = 0; i &lt; cellNumber; i++) {<br />
&nbsp;&nbsp;&nbsp;HSSFCell headerCell = headerRow.createCell((short)i);<br />
&nbsp;&nbsp;&nbsp;headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);<br />
&nbsp;&nbsp;&nbsp;headerCell.setCellValue(tableHeader[i]);<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;/**<br />
&nbsp; * 创建行<br />
&nbsp; * @param data 要写入的数据<br />
&nbsp; * @param rowIndex 第rowIndex行 <br />
&nbsp; */<br />
&nbsp;public void createTableRow(String[] data, int rowIndex) {<br />
&nbsp;&nbsp;HSSFRow row = sheet.createRow(rowIndex);<br />
&nbsp;&nbsp;for (int i = 0; i &lt; data.length; i++) {<br />
&nbsp;&nbsp;&nbsp;HSSFCell cell = row.createCell((short)i);<br />
&nbsp;&nbsp;&nbsp;cell.setEncoding(HSSFCell.ENCODING_UTF_16);<br />
&nbsp;&nbsp;&nbsp;cell.setCellValue(data[i]);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;/**<br />
&nbsp; * 创建整个Excel表<br />
&nbsp; * @param headerName<br />
&nbsp; */<br />
&nbsp;public void createExcelSheet(String headerName, String[][] data) {<br />
&nbsp;&nbsp;this.createTableHeader(headerName);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;String[] rowData;<br />
&nbsp;&nbsp;for (int i = 0; i &lt; data.length; i++) {<br />
&nbsp;&nbsp;&nbsp;rowData = data[i];<br />
&nbsp;&nbsp;&nbsp;createTableRow(rowData, i + 1);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;/**<br />
&nbsp; * 导出Excel表格<br />
&nbsp; * @param os<br />
&nbsp; * @throws IOException<br />
&nbsp; */<br />
&nbsp;public void exportExcel(OutputStream os) throws IOException {<br />
&nbsp;&nbsp;sheet.setGridsPrinted(true);<br />
&nbsp;&nbsp;HSSFFooter footer = sheet.getFooter();<br />
&nbsp;&nbsp;footer.setRight("Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages());<br />
&nbsp;&nbsp;workbook.write(os);<br />
&nbsp;}</p>
<p>&nbsp;public HSSFSheet getSheet() {<br />
&nbsp;&nbsp;return sheet;<br />
&nbsp;}</p>
<p>&nbsp;public void setSheet(HSSFSheet sheet) {<br />
&nbsp;&nbsp;this.sheet = sheet;<br />
&nbsp;}</p>
<p>&nbsp;public String[] getTableHeader() {<br />
&nbsp;&nbsp;return tableHeader;<br />
&nbsp;}</p>
<p>&nbsp;public void setTableHeader(String[] tableHeader) {<br />
&nbsp;&nbsp;this.tableHeader = tableHeader;<br />
&nbsp;}<br />
}</p>
<img src ="http://www.blogjava.net/chou/aggbug/258909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chou/" target="_blank">chou</a> 2009-03-10 20:27 <a href="http://www.blogjava.net/chou/archive/2009/03/10/258909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>邮件客户端</title><link>http://www.blogjava.net/chou/archive/2009/03/10/258908.html</link><dc:creator>chou</dc:creator><author>chou</author><pubDate>Tue, 10 Mar 2009 12:26:00 GMT</pubDate><guid>http://www.blogjava.net/chou/archive/2009/03/10/258908.html</guid><wfw:comment>http://www.blogjava.net/chou/comments/258908.html</wfw:comment><comments>http://www.blogjava.net/chou/archive/2009/03/10/258908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chou/comments/commentRss/258908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chou/services/trackbacks/258908.html</trackback:ping><description><![CDATA[<p>/**<br />
&nbsp;* 邮件客户端<br />
&nbsp;* <br />
&nbsp;* @author zhouqian<br />
&nbsp;* <br />
&nbsp;*/<br />
public class MailClient {<br />
&nbsp;/** 日志实例 */<br />
&nbsp;Log logger = LogFactory.getLog(MailClient.class);</p>
<p>&nbsp;/** 消息对象 */<br />
&nbsp;private Message message;</p>
<p>&nbsp;/** 邮件会话 */<br />
&nbsp;private Session session;</p>
<p>&nbsp;public MailClient() {<br />
&nbsp;&nbsp;super();<br />
&nbsp;&nbsp;this.session = createDefaultSession();<br />
&nbsp;}</p>
<p>&nbsp;public MailClient(Session session) {<br />
&nbsp;&nbsp;super();<br />
&nbsp;&nbsp;this.session = session;<br />
&nbsp;}</p>
<p>&nbsp;public MailClient(Message message) {<br />
&nbsp;&nbsp;this();<br />
&nbsp;&nbsp;this.message = message;<br />
&nbsp;}</p>
<p>&nbsp;public MailClient(Session session, Message message) {<br />
&nbsp;&nbsp;super();<br />
&nbsp;&nbsp;this.session = session;<br />
&nbsp;&nbsp;this.message = message;<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 创建邮件会话<br />
&nbsp; * <br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;protected Session createDefaultSession() {<br />
&nbsp;&nbsp;Properties props = new Properties();<br />
&nbsp;&nbsp;props.put("mail.smtp.host", "smtp.163.com");<br />
&nbsp;&nbsp;props.put("mail.smtp.auth", "true");<br />
&nbsp;&nbsp;Session session = Session.getInstance(props);<br />
&nbsp;&nbsp;session.setDebug(true);<br />
&nbsp;&nbsp;return session;<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 创建纯文本邮件<br />
&nbsp; * <br />
&nbsp; * @param recipientTO<br />
&nbsp; * @param recipientCC<br />
&nbsp; * @param recipientBCC<br />
&nbsp; * @return<br />
&nbsp; * @throws MessagingException<br />
&nbsp; */<br />
&nbsp;protected Message createMimeMessage(String subject, String content,<br />
&nbsp;&nbsp;&nbsp;String recipientTO, String recipientCC, String recipientBCC)<br />
&nbsp;&nbsp;&nbsp;throws MessagingException {<br />
&nbsp;&nbsp;Message message = createBlankMessage(recipientTO, recipientCC,<br />
&nbsp;&nbsp;&nbsp;&nbsp;recipientBCC);</p>
<p>&nbsp;&nbsp;// 设置邮件标题<br />
&nbsp;&nbsp;message.setSubject(subject);</p>
<p>&nbsp;&nbsp;// 设置邮件内容<br />
&nbsp;&nbsp;message.setText(content);</p>
<p>&nbsp;&nbsp;// 设置发送时间<br />
&nbsp;&nbsp;message.setSentDate(new Date(System.currentTimeMillis()));</p>
<p>&nbsp;&nbsp;// 存储邮件信息<br />
&nbsp;&nbsp;message.saveChanges();</p>
<p>&nbsp;&nbsp;return message;<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 创建带HTML内容的邮件<br />
&nbsp; * <br />
&nbsp; * @param subject<br />
&nbsp; * @param content<br />
&nbsp; * @param recipientTO<br />
&nbsp; * @param recipientCC<br />
&nbsp; * @param recipientBCC<br />
&nbsp; * @return<br />
&nbsp; * @throws MessagingException<br />
&nbsp; */<br />
&nbsp;protected Message createHTMLMessage(String subject, String content,<br />
&nbsp;&nbsp;&nbsp;String recipientTO, String recipientCC, String recipientBCC)<br />
&nbsp;&nbsp;&nbsp;throws MessagingException {<br />
&nbsp;&nbsp;Message message = createBlankMessage(recipientTO, recipientCC,<br />
&nbsp;&nbsp;&nbsp;&nbsp;recipientBCC);</p>
<p>&nbsp;&nbsp;// 设置邮件标题<br />
&nbsp;&nbsp;message.setSubject(subject);</p>
<p>&nbsp;&nbsp;// 设置发送时间<br />
&nbsp;&nbsp;message.setSentDate(new Date(System.currentTimeMillis()));</p>
<p>&nbsp;&nbsp;// 创建存放邮件内容的BodyPart对象<br />
&nbsp;&nbsp;BodyPart bp = new MimeBodyPart();<br />
&nbsp;&nbsp;bp.setContent(content, "text/html;charset=gb2312");</p>
<p>&nbsp;&nbsp;// 创建一个MimeMultipart来存放BodyPart对象<br />
&nbsp;&nbsp;Multipart mp = new MimeMultipart();<br />
&nbsp;&nbsp;mp.addBodyPart(bp);</p>
<p>&nbsp;&nbsp;message.setContent(mp);<br />
&nbsp;&nbsp;message.saveChanges();</p>
<p>&nbsp;&nbsp;return message;<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 创建带附件的邮件<br />
&nbsp; * <br />
&nbsp; * @param subject<br />
&nbsp; * @param content<br />
&nbsp; * @param recipientTO<br />
&nbsp; * @param recipientCC<br />
&nbsp; * @param recipientBCC<br />
&nbsp; * @return<br />
&nbsp; * @throws MessagingException<br />
&nbsp; */<br />
&nbsp;protected Message createAttachMessage(String subject, String content,<br />
&nbsp;&nbsp;&nbsp;File attachment, String recipientTO, String recipientCC,<br />
&nbsp;&nbsp;&nbsp;String recipientBCC) throws MessagingException {<br />
&nbsp;&nbsp;Message message = createBlankMessage(recipientTO, recipientCC,<br />
&nbsp;&nbsp;&nbsp;&nbsp;recipientBCC);</p>
<p>&nbsp;&nbsp;// 设置邮件标题<br />
&nbsp;&nbsp;message.setSubject(subject);</p>
<p>&nbsp;&nbsp;// 设置发送时间<br />
&nbsp;&nbsp;message.setSentDate(new Date(System.currentTimeMillis()));</p>
<p>&nbsp;&nbsp;// 创建存放邮件内容的BodyPart对象<br />
&nbsp;&nbsp;BodyPart bp = new MimeBodyPart();<br />
&nbsp;&nbsp;bp.setContent(content, "text/html;charset=gb2312");</p>
<p>&nbsp;&nbsp;// 创建一个MimeMultipart来存放BodyPart对象<br />
&nbsp;&nbsp;Multipart mp = new MimeMultipart();<br />
&nbsp;&nbsp;mp.addBodyPart(bp);</p>
<p>&nbsp;&nbsp;// 设置邮件的附件<br />
&nbsp;&nbsp;bp = new MimeBodyPart();<br />
&nbsp;&nbsp;FileDataSource fds = new FileDataSource(attachment.getName());<br />
&nbsp;&nbsp;DataHandler dh = new DataHandler(fds);<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;bp.setFileName(new String(attachment.getName().getBytes("gb2312")));<br />
&nbsp;&nbsp;} catch (UnsupportedEncodingException e) {<br />
&nbsp;&nbsp;&nbsp;final String errMess = "Caught exception while encoding file name:"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ attachment.getName();<br />
&nbsp;&nbsp;&nbsp;logger.error(errMess);<br />
&nbsp;&nbsp;&nbsp;throw new MailException(errMess, e);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;bp.setDataHandler(dh);<br />
&nbsp;&nbsp;mp.addBodyPart(bp);</p>
<p>&nbsp;&nbsp;message.setContent(mp);<br />
&nbsp;&nbsp;message.saveChanges();<br />
&nbsp;&nbsp;return message;<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 创建空白邮件<br />
&nbsp; * <br />
&nbsp; * @param recipientTO<br />
&nbsp; * @param recipientCC<br />
&nbsp; * @param recipientBCC<br />
&nbsp; * @return<br />
&nbsp; * @throws MessagingException<br />
&nbsp; */<br />
&nbsp;protected Message createBlankMessage(String recipientTO,<br />
&nbsp;&nbsp;&nbsp;String recipientCC, String recipientBCC) throws MessagingException {<br />
&nbsp;&nbsp;Message message = new MimeMessage(session);</p>
<p>&nbsp;&nbsp;// 设置发件人<br />
&nbsp;&nbsp;InternetAddress from = new InternetAddress("mfktfp2004@163.com");<br />
&nbsp;&nbsp;message.setFrom(from);</p>
<p>&nbsp;&nbsp;// 设置收件人<br />
&nbsp;&nbsp;InternetAddress to = new InternetAddress(recipientTO);<br />
&nbsp;&nbsp;message.setRecipient(Message.RecipientType.TO, to);<br />
&nbsp;&nbsp;if (StringUtil.isNotEmpty(recipientCC)) {<br />
&nbsp;&nbsp;&nbsp;InternetAddress cc = new InternetAddress(recipientCC);<br />
&nbsp;&nbsp;&nbsp;message.setRecipient(Message.RecipientType.CC, cc);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if (StringUtil.isNotEmpty(recipientBCC)) {<br />
&nbsp;&nbsp;&nbsp;InternetAddress bcc = new InternetAddress(recipientBCC);<br />
&nbsp;&nbsp;&nbsp;message.setRecipient(Message.RecipientType.BCC, bcc);<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;return message;<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 发送邮件<br />
&nbsp; * <br />
&nbsp; * @param message<br />
&nbsp; * @throws MessagingException<br />
&nbsp; */<br />
&nbsp;public void sendEmail(Message message) throws MessagingException {<br />
&nbsp;&nbsp;// 以smtp方式登陆邮箱<br />
&nbsp;&nbsp;Transport transport = session.getTransport("smtp");<br />
&nbsp;&nbsp;transport.connect("smtp.163.com", "mfktfp2004", "19850921"); // SMTP地址，用户名，密码</p>
<p>&nbsp;&nbsp;// 发送邮件<br />
&nbsp;&nbsp;transport.sendMessage(message, message.getAllRecipients());<br />
&nbsp;&nbsp;transport.close();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 发送纯文本邮件<br />
&nbsp; * <br />
&nbsp; * @param subject<br />
&nbsp; * @param content<br />
&nbsp; * @param recipientTO<br />
&nbsp; * @param recipientCC<br />
&nbsp; * @param recipientBCC<br />
&nbsp; */<br />
&nbsp;public void sendMimeEmail(String subject, String content,<br />
&nbsp;&nbsp;&nbsp;String recipientTO, String recipientCC, String recipientBCC) {<br />
&nbsp;&nbsp;Message message = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;message = createMimeMessage(subject, content, recipientTO,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recipientCC, recipientBCC);<br />
&nbsp;&nbsp;&nbsp;sendEmail(message);<br />
&nbsp;&nbsp;} catch (MessagingException e) {<br />
&nbsp;&nbsp;&nbsp;logger.error("Send mime email failure", e);<br />
&nbsp;&nbsp;&nbsp;throw new MailException("Error sending email, failure", e);<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 发送带HTML内容的邮件<br />
&nbsp; * <br />
&nbsp; * @param subject<br />
&nbsp; * @param content<br />
&nbsp; * @param recipientTO<br />
&nbsp; * @param recipientCC<br />
&nbsp; * @param recipientBCC<br />
&nbsp; */<br />
&nbsp;public void sendHTMLEmail(String subject, String content,<br />
&nbsp;&nbsp;&nbsp;String recipientTO, String recipientCC, String recipientBCC) {<br />
&nbsp;&nbsp;Message message = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;message = createHTMLMessage(subject, content, recipientTO,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recipientCC, recipientBCC);<br />
&nbsp;&nbsp;&nbsp;sendEmail(message);<br />
&nbsp;&nbsp;} catch (MessagingException e) {<br />
&nbsp;&nbsp;&nbsp;logger.error("Send html email failure", e);<br />
&nbsp;&nbsp;&nbsp;throw new MailException("Error sending email, failure", e);<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 发送带附件的邮件<br />
&nbsp; * <br />
&nbsp; * @param subject<br />
&nbsp; * @param content<br />
&nbsp; * @param recipientTO<br />
&nbsp; * @param recipientCC<br />
&nbsp; * @param recipientBCC<br />
&nbsp; */<br />
&nbsp;public void sendAttachEmail(String subject, String content,<br />
&nbsp;&nbsp;&nbsp;File attachment, String recipientTO, String recipientCC,<br />
&nbsp;&nbsp;&nbsp;String recipientBCC) {<br />
&nbsp;&nbsp;Message message = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;message = createAttachMessage(subject, content, attachment,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recipientTO, recipientCC, recipientBCC);<br />
&nbsp;&nbsp;&nbsp;sendEmail(message);<br />
&nbsp;&nbsp;} catch (MessagingException e) {<br />
&nbsp;&nbsp;&nbsp;logger.error("Send html email failure", e);<br />
&nbsp;&nbsp;&nbsp;throw new MailException("Error sending email, failure", e);<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;public Message getMessage() {<br />
&nbsp;&nbsp;return message;<br />
&nbsp;}</p>
<p>&nbsp;public void setMessage(Message message) {<br />
&nbsp;&nbsp;this.message = message;<br />
&nbsp;}</p>
<p>&nbsp;public Session getSession() {<br />
&nbsp;&nbsp;return session;<br />
&nbsp;}</p>
<p>&nbsp;public void setSession(Session session) {<br />
&nbsp;&nbsp;this.session = session;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;MailClient client = new MailClient();<br />
&nbsp;&nbsp;client.sendMimeEmail("test", "test", "zhouqian1103@163.com", null, null);<br />
&nbsp;}<br />
}<br />
<br />
<br />
</p>
<p>public class MailException extends RuntimeException {<br />
&nbsp;private static final long serialVersionUID = 1L;<br />
&nbsp;<br />
&nbsp;/** Throwable实例 */<br />
&nbsp;protected Throwable throwable;<br />
&nbsp;<br />
&nbsp;public MailException() {<br />
&nbsp;&nbsp;super();<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public MailException(String message) {<br />
&nbsp;&nbsp;super(message);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public MailException(Throwable cause) {<br />
&nbsp;&nbsp;this.throwable = cause;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public MailException(String message, Throwable cause) {<br />
&nbsp;&nbsp;super(message);<br />
&nbsp;&nbsp;this.throwable = cause;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public void printStackTrace(PrintStream ps) {<br />
&nbsp;&nbsp;super.printStackTrace(ps);<br />
&nbsp;&nbsp;if (throwable != null) {<br />
&nbsp;&nbsp;&nbsp;ps.println("with nested Exception:" + throwable);<br />
&nbsp;&nbsp;&nbsp;throwable.printStackTrace(ps);<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public void printStackTrace(PrintWriter pw) {<br />
&nbsp;&nbsp;super.printStackTrace(pw);<br />
&nbsp;&nbsp;if (throwable != null) {<br />
&nbsp;&nbsp;&nbsp;pw.println("with nested Exception:" + throwable);<br />
&nbsp;&nbsp;&nbsp;throwable.printStackTrace(pw);<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public String toString() {<br />
&nbsp;&nbsp;if (throwable == null) {<br />
&nbsp;&nbsp;&nbsp;return super.toString();<br />
&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;return super.toString() + "with nested exception:" + throwable;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;public Throwable getThrowable() {<br />
&nbsp;&nbsp;return throwable;<br />
&nbsp;}<br />
}</p>
<p><br />
</p>
<img src ="http://www.blogjava.net/chou/aggbug/258908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chou/" target="_blank">chou</a> 2009-03-10 20:26 <a href="http://www.blogjava.net/chou/archive/2009/03/10/258908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate一对多双向关联及inverse的作用(转)</title><link>http://www.blogjava.net/chou/archive/2008/09/06/227398.html</link><dc:creator>chou</dc:creator><author>chou</author><pubDate>Sat, 06 Sep 2008 06:41:00 GMT</pubDate><guid>http://www.blogjava.net/chou/archive/2008/09/06/227398.html</guid><wfw:comment>http://www.blogjava.net/chou/comments/227398.html</wfw:comment><comments>http://www.blogjava.net/chou/archive/2008/09/06/227398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chou/comments/commentRss/227398.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chou/services/trackbacks/227398.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: 12px/20px Arial; text-transform: none; color: rgb(51,51,51); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">在测试Hibernate的一对多双向关联映射时，碰到很有趣的问题，跟inverse属性直接相关。<br style="line-height: normal" />
<br style="line-height: normal" />
1、People.hbm.xml<br style="line-height: normal" />
<br style="line-height: normal" />
＜hibernate-mapping default-lazy="false"＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜class name="com.persistent.People" table="people"＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜id name="id" column="peopleId" unsaved-value="0"＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜generator class="increment"＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜/generator＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜/id＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜property name="name" column="name"＞＜/property＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜set name="addresses" cascade="save-update"＞<br style="line-height: normal" />
＜key column="peopleId" not-null="true" /＞<br style="line-height: normal" />
＜one-to-many class="com.persistent.Address"/＞<br style="line-height: normal" />
＜/set＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜/class＞<br style="line-height: normal" />
＜/hibernate-mapping＞<br style="line-height: normal" />
<br style="line-height: normal" />
2、Address.hbm.xml<br style="line-height: normal" />
<br style="line-height: normal" />
＜hibernate-mapping＞<br style="line-height: normal" />
＜class name="com.persistent.Address" table="address"＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜id name="id" column="addressId" unsaved-value="0"＞<br style="line-height: normal" />
＜generator class="increment"＞<br style="line-height: normal" />
＜/generator＞<br style="line-height: normal" />
＜/id＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜many-to-one name="people" column="peopleId" insert="false" update="false"＞＜/many-to-one＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜property name="addressName" column="addressName"＞＜/property＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜property name="codeNumber" column="codeNumber"＞＜/property＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜/class＞<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
＜/hibernate-mapping＞<br style="line-height: normal" />
3、People.java和Address.java<br style="line-height: normal" />
<br style="line-height: normal" />
public class People ...{<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
private long id;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
private String name;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
private Set addresses = new HashSet();<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
...<br style="line-height: normal" />
}<br style="line-height: normal" />
<br style="line-height: normal" />
public class Address ...{<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
private long id;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
private People people;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
private String addressName;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
private String codeNumber;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
...<br style="line-height: normal" />
}<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
<br style="line-height: normal" />
4、数据库结构<br style="line-height: normal" />
<br style="line-height: normal" />
people表：{peopleId,name}<br style="line-height: normal" />
<br style="line-height: normal" />
address表：{addressId,peopleId,addressName,codeNumber}<br style="line-height: normal" />
<br style="line-height: normal" />
5、测试代码<br style="line-height: normal" />
<br style="line-height: normal" />
People people = new People();<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
people.setName("linda");<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
Address address = new Address();<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
address.setAddressName("yunnan");<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
address.setCodeNumber("564123");<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
address.setPeople(people);<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
people.getAddresses().add(address);<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
Session session = HibernateSessionFactory.getSession();<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
session.beginTransaction();<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
session.save(people);<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
session.getTransaction().commit();<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
<br style="line-height: normal" />
6、运行结果<br style="line-height: normal" />
<br style="line-height: normal" />
　　上面测试代码运行起来正确：<br style="line-height: normal" />
<br style="line-height: normal" />
Hibernate: select max(peopleId) from people<br style="line-height: normal" />
Hibernate: select max(addressId) from address<br style="line-height: normal" />
Hibernate: insert into people (name, peopleId) values (?, ?)<br style="line-height: normal" />
Hibernate: insert into address (addressName, codeNumber, peopleId, addressId) values (?, ?, ?, ?)<br style="line-height: normal" />
Hibernate: update address set peopleId=? where addressId=?<br style="line-height: normal" />
<br style="line-height: normal" />
　　如果将People.hbm.xml映射改写一下：<br style="line-height: normal" />
<br style="line-height: normal" />
＜set name="addresses" cascade="save-update" inverse="true"＞<br style="line-height: normal" />
＜key column="peopleId" not-null="true" /＞<br style="line-height: normal" />
＜one-to-many class="com.persistent.Address"/＞<br style="line-height: normal" />
＜/set＞<br style="line-height: normal" />
<br style="line-height: normal" />
　　不同之处在于添加了inverse="true"，结果：<br style="line-height: normal" />
<br style="line-height: normal" />
Hibernate: select max(peopleId) from people<br style="line-height: normal" />
Hibernate: select max(addressId) from address<br style="line-height: normal" />
Hibernate: insert into people (name, peopleId) values (?, ?)<br style="line-height: normal" />
Hibernate: insert into address (addressName, codeNumber, addressId) values (?, ?, ?)<br style="line-height: normal" />
<br style="line-height: normal" />
　　可以看到，peopleId并没有写入到关联的address当中，数据库address表中相应记录的peopleId字段为空。<br style="line-height: normal" />
<br style="line-height: normal" />
7、分析<br style="line-height: normal" />
<br style="line-height: normal" />
　　在Hibernate中，术语inverse是反转的意思，在关联关系中，inverse="false"为主控方，由主控方负责维护对象的关联关系。所以上面的映射文件改动之后，address为主控方，people为被控方，但是测试代码只进行了一个保存操作session.save(people)，这是针对people的，因此无法正确级联保存address。而原来的映射文件中（虽然没有明确指明，Hibernate默认inverse="false"），people为主控方，因此保存people时它会保证关联的address的正确保存。<br style="line-height: normal" />
<br style="line-height: normal" />
　　也就是说，Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库。按照原来的映射文件，people.getAddresses().add(address)，即主控方对象的状态发生了改变，因此数据库会跟着对象状态的变化来同步更新数据库；而address.setPeople(people)，即被控方对象的状态发生了改变，它是不能触发对象和数据库的同步更新的。</span>
<img src ="http://www.blogjava.net/chou/aggbug/227398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chou/" target="_blank">chou</a> 2008-09-06 14:41 <a href="http://www.blogjava.net/chou/archive/2008/09/06/227398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不错的js层效果</title><link>http://www.blogjava.net/chou/archive/2008/08/28/225254.html</link><dc:creator>chou</dc:creator><author>chou</author><pubDate>Thu, 28 Aug 2008 04:42:00 GMT</pubDate><guid>http://www.blogjava.net/chou/archive/2008/08/28/225254.html</guid><wfw:comment>http://www.blogjava.net/chou/comments/225254.html</wfw:comment><comments>http://www.blogjava.net/chou/archive/2008/08/28/225254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chou/comments/commentRss/225254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chou/services/trackbacks/225254.html</trackback:ping><description><![CDATA[<p>//保留的位置 <br />
var saveLeft,saveTop,saveWidth,saveHeight; <br />
var theBody; <br />
var eventType;&nbsp;&nbsp;&nbsp; //事件种类, "move"、"resize" <br />
var div; </p>
<p><br />
//创建并设定div的参数 <br />
function setDiv(content) <br />
{<br />
&nbsp;<br />
&nbsp; //防止重复打开 <br />
&nbsp; if (div) <br />
&nbsp; { <br />
&nbsp;&nbsp; eCloseDiv(); <br />
&nbsp; } <br />
&nbsp; var newLeft,newTop,newWidth,newHeight; <br />
&nbsp; theBody = document.body; <br />
&nbsp;&nbsp; <br />
&nbsp; div = document.createElement("div"); <br />
&nbsp; div.id = "panelDiv"; <br />
&nbsp; div.style.position = "absolute"; <br />
&nbsp; div.style.backgroundColor = "#5F86B5" // 边框颜色 <br />
&nbsp; div.style.padding = "1px 1px 1px 1px"; <br />
&nbsp; div.style.overflow = "hidden"; <br />
&nbsp; div.style.zIndex = 1; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; //设定打开的大小和位置 <br />
&nbsp; Function() <br />
&nbsp; { <br />
&nbsp;&nbsp; //默认大小默认位置居中打开&nbsp; <br />
&nbsp;&nbsp; newWidth = "350px"; <br />
&nbsp;&nbsp; newHeight = "260px"; <br />
&nbsp;&nbsp; newLeft = (theBody.clientWidth - parseInt(newWidth)) / 2 + "px"; <br />
&nbsp;&nbsp; newTop = (theBody.clientHeight - parseInt(newHeight)) / 2 + "px"; <br />
&nbsp;&nbsp; div.style.width = newWidth; <br />
&nbsp;&nbsp; div.style.height = newHeight; <br />
&nbsp;&nbsp; div.style.left = newLeft; <br />
&nbsp;&nbsp; div.style.top = newTop; <br />
&nbsp; } <br />
&nbsp; div = setChild(div,content); <br />
&nbsp; theBody.appendChild(div); <br />
&nbsp;&nbsp; <br />
//&nbsp; var ipt = document.getElementsByTagName("input"); <br />
//&nbsp; for(var i = 0; i &lt; ipt.length; i++) <br />
//&nbsp; { <br />
//&nbsp;&nbsp; ipt[i].disabled = true; <br />
//&nbsp; } <br />
} </p>
<p>function setChild(div,content) <br />
{ <br />
&nbsp; //可否移动、调整 <br />
&nbsp; var isMove = true<br />
&nbsp; var isResize = true; <br />
&nbsp;&nbsp; <br />
&nbsp; //底色 <br />
&nbsp; var cDiv = document.createElement; <br />
&nbsp; var backDiv = cDiv("div"); <br />
&nbsp; backDiv.style.cssText = "left: 0px; top: 0px; width: 100%; height: 100%; background-color:#DFE8F6;" ; <br />
&nbsp; div.appendChild(backDiv); <br />
&nbsp;&nbsp; <br />
&nbsp; //标题 <br />
&nbsp; var topDiv = cDiv("div"); <br />
&nbsp; topDiv.style.cssText = "left: 1px; top: 1px; width: 100%; height: 22px; border-bottom:1px solid #5F86B5; position: absolute; background: url(images/bgd.gif) repeat-x; vertical-align: middle; z-index: 5"; <br />
&nbsp; if (isMove) <br />
&nbsp; { <br />
&nbsp;&nbsp; topDiv.style.cursor = "move"; <br />
&nbsp;&nbsp; topDiv.setAttribute("onmousedown", function(){setMove(this)}); <br />
&nbsp; } <br />
&nbsp; else <br />
&nbsp; { <br />
&nbsp;&nbsp; topDiv.style.cursor = "default"; <br />
&nbsp; } <br />
&nbsp; topDiv.innerHTML = "&lt;span style='top: 5px; left:5px; font-size: 12px; font-weight: bold; color: #102548; position: relative;' onselectstart='return false'&gt;过滤提示&lt;/span&gt;"; <br />
&nbsp; div.appendChild(topDiv); <br />
&nbsp;&nbsp; <br />
&nbsp; //关闭按钮 <br />
&nbsp; var closeDiv = cDiv("div"); <br />
&nbsp; closeDiv.style.cssText = "right: 8px; top : 4px; width: 16px; height: 16px; position: absolute;&nbsp; text-align: center; vertical-align: middle; cursor: pointer; z-index:10"; <br />
&nbsp; closeDiv.setAttribute("onclick", function() {eCloseDiv()}); <br />
&nbsp; closeDiv.innerHTML = "&lt;span style='font-size: 12px; font-weight: bold; color: #0E377A;' title='Esc快捷键'&gt;&lt;img src = 'images/close.gif'/&gt;&lt;/span&gt;"; <br />
&nbsp; div.appendChild(closeDiv); <br />
&nbsp;&nbsp; <br />
&nbsp; //内容 <br />
&nbsp; var contentDiv = cDiv("div"); <br />
&nbsp; contentDiv.style.cssText = "left: 1px; top: 35px; background-color:#DFE8F6; width: 100%; position: absolute; overflow: auto;&nbsp; padding:5px;"; <br />
&nbsp; contentDiv.style.height = (parseInt(div.style.height) - 40) + "px"; <br />
&nbsp; contentDiv.innerHTML = "&lt;table style='width: 100%; height: 100%; text-align: left; vertical-align: hidden'&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;"+content+"&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"; <br />
&nbsp; div.appendChild(contentDiv); <br />
&nbsp;&nbsp; <br />
&nbsp; //调整大小 <br />
&nbsp; var reDiv = cDiv("div"); <br />
&nbsp; reDiv.style.cssText = "right: 0px; bottom: 0px; width: 5px; height: 5px; position: absolute;"; <br />
&nbsp; if (isResize) <br />
&nbsp; { <br />
&nbsp;&nbsp; reDiv.style.cursor = "se-resize"; <br />
&nbsp;&nbsp; reDiv.setAttribute("onmousedown", function(){setResize(this)}); <br />
&nbsp; } <br />
&nbsp; else <br />
&nbsp; { <br />
&nbsp;&nbsp; reDiv.style.cursor = "default"; <br />
&nbsp; } <br />
&nbsp; div.appendChild(reDiv); <br />
&nbsp;&nbsp; <br />
&nbsp; return div; <br />
} </p>
<p>var oX, oY, oLeft, oTop, oWidth, oHeight; //存储原始移动前的位置 <br />
var divClone, oDiv;&nbsp;&nbsp; //克隆的节点和原始节点 <br />
var oTime; <br />
//clone拖移的节点 <br />
function setMove(obj) <br />
{ <br />
&nbsp; if (event.button == 1) <br />
&nbsp; { <br />
&nbsp;&nbsp; if (oTime) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; clearTimeout(oTime); <br />
&nbsp;&nbsp;&nbsp; divClone.parentNode.removeChild(divClone); <br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; oDiv = obj.parentNode; <br />
&nbsp;&nbsp; divClone = oDiv.cloneNode(true); <br />
&nbsp;&nbsp; divClone.style.filter = "Alpha(opacity=50)"; <br />
&nbsp;&nbsp; divClone.childNodes[1].setAttribute("onmousemove", function(){startMove(this)}); <br />
&nbsp;&nbsp; divClone.childNodes[1].setAttribute("onmouseup", function(){endMove()}); <br />
&nbsp;&nbsp; oX = parseInt(event.clientX); <br />
&nbsp;&nbsp; oY = parseInt(event.clientY); <br />
&nbsp;&nbsp; oLeft = parseInt(divClone.style.left); <br />
&nbsp;&nbsp; oTop = parseInt(divClone.style.top); <br />
&nbsp;&nbsp; document.body.appendChild(divClone); <br />
&nbsp;&nbsp; divClone.childNodes[1].setCapture(); <br />
&nbsp;&nbsp; eventType = "move"; <br />
&nbsp; } <br />
} </p>
<p>//拖移 <br />
function startMove(obj) <br />
{ <br />
&nbsp; if (eventType == "move" &amp;&amp; event.button == 1) <br />
&nbsp; { <br />
&nbsp;&nbsp; var moveDiv = obj.parentNode; <br />
&nbsp;&nbsp; moveDiv.style.left = (oLeft + event.clientX - oX) + "px"; <br />
&nbsp;&nbsp; moveDiv.style.top = (oTop + event.clientY - oY) + "px"; <br />
&nbsp; } <br />
} </p>
<p>//拖移结束调用动画 <br />
function endMove() <br />
{ <br />
&nbsp; if (eventType == "move") <br />
&nbsp; { <br />
&nbsp;&nbsp; divClone.childNodes[1].releaseCapture(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; move(parseInt(divClone.style.left), parseInt(divClone.style.top)); <br />
&nbsp;&nbsp; eventType = ""; <br />
&nbsp; } <br />
} </p>
<p>//移动的动画 <br />
function move(aimLeft, aimTop) <br />
{ <br />
&nbsp; var nowLeft = parseInt(oDiv.style.left); <br />
&nbsp; var nowTop = parseInt(oDiv.style.top); <br />
&nbsp; var moveSize = 30; <br />
&nbsp; if (nowLeft &gt; aimLeft + moveSize || nowLeft &lt; aimLeft - moveSize || nowTop &gt; aimTop + moveSize || nowTop &lt; aimTop - moveSize) <br />
&nbsp; { <br />
&nbsp;&nbsp; oDiv.style.left = aimLeft &gt; nowLeft + moveSize ? (nowLeft + moveSize) + "px" : aimLeft &lt; nowLeft - moveSize ? (nowLeft - moveSize) + "px" : nowLeft + "px"; <br />
&nbsp;&nbsp; oDiv.style.top = aimTop &gt; nowTop + moveSize ? (nowTop + moveSize) + "px" : aimTop &lt; nowTop - moveSize ? (nowTop - moveSize) + "px" : nowTop + "px"; <br />
&nbsp;&nbsp; oTime = setTimeout("move(" + aimLeft + ", " + aimTop + ")", 1); <br />
&nbsp; } <br />
&nbsp; else <br />
&nbsp; { <br />
&nbsp;&nbsp; oDiv.style.left = divClone.style.left; <br />
&nbsp;&nbsp; oDiv.style.top = divClone.style.top; <br />
&nbsp;&nbsp; divClone.parentNode.removeChild(divClone); <br />
&nbsp;&nbsp; divClone == null; <br />
&nbsp; } <br />
} </p>
<p>//clone调整大小的节点 <br />
function setResize(obj) <br />
{ <br />
&nbsp; if (event.button == 1) <br />
&nbsp; { <br />
&nbsp;&nbsp; if (oTime) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; clearTimeout(oTime); <br />
&nbsp;&nbsp;&nbsp; divClone.parentNode.removeChild(divClone); <br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; oDiv = obj.parentNode; <br />
&nbsp;&nbsp; divClone = oDiv.cloneNode(true); <br />
&nbsp;&nbsp; divClone.style.filter = "Alpha(opacity=50)"; <br />
&nbsp;&nbsp; divClone.childNodes[4].setAttribute("onmousemove", function(){startResize(this)}); <br />
&nbsp;&nbsp; divClone.childNodes[4].setAttribute("onmouseup", function(){endResize()}); <br />
&nbsp;&nbsp; oX = parseInt(event.clientX); <br />
&nbsp;&nbsp; oY = parseInt(event.clientY); <br />
&nbsp;&nbsp; oWidth = parseInt(divClone.style.width); <br />
&nbsp;&nbsp; oHeight = parseInt(divClone.style.height); <br />
&nbsp;&nbsp; document.body.appendChild(divClone); <br />
&nbsp;&nbsp; divClone.childNodes[4].setCapture(); <br />
&nbsp;&nbsp; eventType = "resize"; <br />
&nbsp; } <br />
} </p>
<p>//拖动调整大小 <br />
function startResize(obj) <br />
{ <br />
&nbsp; if (eventType == "resize" &amp;&amp; event.button == 1) <br />
&nbsp; { <br />
&nbsp;&nbsp; var nX = event.clientX; <br />
&nbsp;&nbsp; var nY = event.clientY; <br />
&nbsp;&nbsp; if (nX &gt; oX - oWidth &amp;&amp; nY &gt; oY - oHeight + 40) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; var resizeDiv = obj.parentNode; <br />
&nbsp;&nbsp;&nbsp; resizeDiv.style.width = (oWidth + event.clientX - oX) + "px"; <br />
&nbsp;&nbsp;&nbsp; resizeDiv.style.height = (oHeight + event.clientY - oY) + "px"; <br />
&nbsp;&nbsp;&nbsp; resizeDiv.childNodes[3].style.height = (parseInt(resizeDiv.style.height) - 40) + "px"; <br />
&nbsp;&nbsp; } <br />
&nbsp; } <br />
} </p>
<p>//调整大小结束 <br />
function endResize() <br />
{ <br />
&nbsp; if (eventType == "resize") <br />
&nbsp; { <br />
&nbsp;&nbsp; divClone.childNodes[4].releaseCapture(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resize(parseInt(divClone.style.width), parseInt(divClone.style.height)); <br />
&nbsp;&nbsp; eventType = ""; <br />
&nbsp; } <br />
} </p>
<p>//调整大小的动画 <br />
function resize(aimWidth, aimHeight) <br />
{ <br />
&nbsp; var nowWidth = parseInt(oDiv.style.width); <br />
&nbsp; var nowHeight = parseInt(oDiv.style.height); <br />
&nbsp; var resizeSize = 30; <br />
&nbsp; if (nowWidth &gt; aimWidth + resizeSize || nowWidth &lt; aimWidth - resizeSize || nowHeight &gt; aimHeight + resizeSize || nowHeight &lt; aimHeight - resizeSize) <br />
&nbsp; { <br />
&nbsp;&nbsp; oDiv.style.width = aimWidth &gt; nowWidth + resizeSize ? (nowWidth + resizeSize) + "px" : aimWidth &lt; nowWidth - resizeSize ? (nowWidth - resizeSize) + "px" : nowWidth + "px"; <br />
&nbsp;&nbsp; oDiv.style.height = aimHeight &gt; nowHeight + resizeSize ? (nowHeight + resizeSize) + "px" : aimHeight &lt; nowHeight - resizeSize ? (nowHeight - resizeSize) + "px" : nowHeight + "px"; <br />
&nbsp;&nbsp; oDiv.childNodes[3].style.height = (parseInt(oDiv.style.height) - 40) + "px"; <br />
&nbsp;&nbsp; oTime = setTimeout("resize(" + aimWidth + ", " + aimHeight + ")", 1); <br />
&nbsp; } <br />
&nbsp; else <br />
&nbsp; { <br />
&nbsp;&nbsp; oDiv.style.width = divClone.style.width; <br />
&nbsp;&nbsp; oDiv.style.height = divClone.style.height; <br />
&nbsp;&nbsp; oDiv.childNodes[3].style.height = (parseInt(oDiv.style.height) - 40) + "px"; <br />
&nbsp;&nbsp; divClone.parentNode.removeChild(divClone); <br />
&nbsp;&nbsp; divClone == null; <br />
&nbsp; } <br />
} </p>
<p>//关闭DIV <br />
function eCloseDiv() <br />
{ &nbsp;<br />
&nbsp;<br />
&nbsp; if (div) <br />
&nbsp; { <br />
&nbsp;&nbsp; div.parentNode.removeChild(div); <br />
//&nbsp;&nbsp; var ipt = document.getElementsByTagName("input"); <br />
//&nbsp;&nbsp; for(var i = 0; i &lt; ipt.length; i++) <br />
//&nbsp;&nbsp; { <br />
//&nbsp;&nbsp;&nbsp; ipt[i].disabled = false; <br />
//&nbsp;&nbsp; } <br />
&nbsp;&nbsp; div = null; <br />
&nbsp; } <br />
} </p>
<p>//保留位置和大小 <br />
function saveDiv() <br />
{ <br />
&nbsp; if (div) <br />
&nbsp; { <br />
&nbsp;&nbsp; saveLeft = div.style.left; <br />
&nbsp;&nbsp; saveTop = div.style.top; <br />
&nbsp;&nbsp; saveWidth = div.style.width; <br />
&nbsp;&nbsp; saveHeight = div.style.height; <br />
&nbsp; } <br />
} </p>
<p>//快捷键 <br />
document.onkeydown = function() <br />
{ <br />
&nbsp; event.keyCode == 27 ? eCloseDiv() : null;&nbsp; //Esc快捷键 <br />
&nbsp; event.ctrlKey &amp;&amp; (event.keyCode == 83 || event.keyCode == 115) ? saveDiv() : null; //ctrl+s保存位置 <br />
&nbsp; event.ctrlKey &amp;&amp; event.keyCode == 13 ? setDiv() : null //ctrl+enter打开Div <br />
&nbsp; !event.ctrlKey &amp;&amp; (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) ? arrowMove(event.keyCode) : null; <br />
&nbsp; event.ctrlKey &amp;&amp; (event.keyCode == 37&nbsp; || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) ? arrowResize(event.keyCode) : null; <br />
} </p>
<p>// 单击层以外的地方隐藏层<br />
document.onclick = function()<br />
{<br />
&nbsp; if (div)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(typeof event.srcElement.message == "undefined")<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (div.componentFromPoint(event.clientX,event.clientY)=="outside")<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; eCloseDiv();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; } <br />
&nbsp; }<br />
}</p>
<p>//上下左右箭头移动div <br />
function arrowMove(eKeyCode) <br />
{ <br />
&nbsp; if (div) <br />
&nbsp; { <br />
&nbsp;&nbsp; var isMove = document.getElementById("isMove").checked; <br />
&nbsp;&nbsp; if (isMove) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; switch(eKeyCode) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp; case 37: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.style.left = (parseInt(div.style.left) - 1) + "px"; //left <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break <br />
&nbsp;&nbsp;&nbsp;&nbsp; case 38: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.style.top = (parseInt(div.style.top) - 1) + "px"; //up <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break <br />
&nbsp;&nbsp;&nbsp;&nbsp; case 39: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.style.left = (parseInt(div.style.left) + 1) + "px"; //right <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break <br />
&nbsp;&nbsp;&nbsp;&nbsp; case 40: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.style.top = (parseInt(div.style.top) + 1) + "px"; //down <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp; } <br />
&nbsp; } <br />
} </p>
<p>//ctrl+上下左右箭头调整div大小 <br />
function arrowResize(eKeyCode) <br />
{ <br />
&nbsp; if (div) <br />
&nbsp; { <br />
&nbsp;&nbsp; var isResize = document.getElementById("isResize").checked; <br />
&nbsp;&nbsp; if (isResize) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; switch(eKeyCode) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp; case 37: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.style.width = (parseInt(div.style.width) - 1) + "px"; //left <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break <br />
&nbsp;&nbsp;&nbsp;&nbsp; case 38: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.style.height = (parseInt(div.style.height) - 1) + "px"; //up <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break <br />
&nbsp;&nbsp;&nbsp;&nbsp; case 39: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.style.width = (parseInt(div.style.width) + 1) + "px"; //right <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break <br />
&nbsp;&nbsp;&nbsp;&nbsp; case 40: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; div.style.height = (parseInt(div.style.height) + 1) + "px"; //down <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp; } <br />
&nbsp; } <br />
} <br />
</p>
<img src ="http://www.blogjava.net/chou/aggbug/225254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chou/" target="_blank">chou</a> 2008-08-28 12:42 <a href="http://www.blogjava.net/chou/archive/2008/08/28/225254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml提交数据</title><link>http://www.blogjava.net/chou/archive/2008/08/28/225252.html</link><dc:creator>chou</dc:creator><author>chou</author><pubDate>Thu, 28 Aug 2008 04:37:00 GMT</pubDate><guid>http://www.blogjava.net/chou/archive/2008/08/28/225252.html</guid><wfw:comment>http://www.blogjava.net/chou/comments/225252.html</wfw:comment><comments>http://www.blogjava.net/chou/archive/2008/08/28/225252.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chou/comments/commentRss/225252.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chou/services/trackbacks/225252.html</trackback:ping><description><![CDATA[<p>前台：<br />
&nbsp;&nbsp;&nbsp;&nbsp; var url = "filter.do?action=filter";<br />
&nbsp;&nbsp;&nbsp;&nbsp; var xmlDocument = XmlDocument.create();<br />
&nbsp;&nbsp;&nbsp;&nbsp; var filterInfo = xmlDocument.createElement("filterInfo");<br />
&nbsp;&nbsp;&nbsp;&nbsp; xmlDocument.appendChild(filterInfo);<br />
&nbsp;&nbsp;&nbsp;&nbsp; appendSimpleChildNode(xmlDocument, filterInfo, "type", type);<br />
&nbsp;&nbsp;&nbsp;&nbsp; appendSimpleChildNode(xmlDocument, filterInfo, "condition", condition);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp = XmlHttp.create();<br />
&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.open("POST", url, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp; xmlHttp.send(xmlDocument.xml);<br />
&nbsp;&nbsp;&nbsp;&nbsp; var xmlString = xmlHttp.responseText;<br />
&nbsp;&nbsp;&nbsp;&nbsp; return xmlString;</p>
<p>后台：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAXBuilder saxb = new SAXBuilder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = saxb.build(request.getInputStream());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element root = doc.getRootElement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String type = root.getChildText("type"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String inputCondition = root.getChildText("condition"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<img src ="http://www.blogjava.net/chou/aggbug/225252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chou/" target="_blank">chou</a> 2008-08-28 12:37 <a href="http://www.blogjava.net/chou/archive/2008/08/28/225252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>