﻿<?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-开源俱乐部</title><link>http://www.blogjava.net/gavinju/</link><description>开源框架</description><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 09:58:15 GMT</lastBuildDate><pubDate>Sun, 03 May 2026 09:58:15 GMT</pubDate><ttl>60</ttl><item><title>java instanceof浅谈！</title><link>http://www.blogjava.net/gavinju/archive/2007/07/04/128195.html</link><dc:creator>HandSoft</dc:creator><author>HandSoft</author><pubDate>Wed, 04 Jul 2007 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/gavinju/archive/2007/07/04/128195.html</guid><wfw:comment>http://www.blogjava.net/gavinju/comments/128195.html</wfw:comment><comments>http://www.blogjava.net/gavinju/archive/2007/07/04/128195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gavinju/comments/commentRss/128195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gavinju/services/trackbacks/128195.html</trackback:ping><description><![CDATA[instanceof 是Java的一个二元操作符,和==, &gt; , &lt; 是同一类东西. 由于它是由字母组成的,所以也是Java的保留关键字. 它的作用是测试它左边的对象是否是它右边的类的实例, 返回boolean类型的数据。例：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String s = "I an an Object!";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isObject = s&nbsp; instanceOf&nbsp; Object;<br>我们声明了一个String对象引用, 指向一个String 对象, 然后用instanceof 来测试它所指向的对象是否是Object类的一个实例, 显然, 这是真的, 所以返回true,也就是isObject的值为True.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instanceof有一些用处. 比如我们写了一个处理帐单的系统, 其中有这样三个类：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class Bill{//省略细节}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class PhoneBill&nbsp; extends Bill {//省略细节}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class GasBill extends Bill {//省略细节}&nbsp;&nbsp;&nbsp;&nbsp; <br>在处理程序里有一个方法, 接受一个Bill类型的对象, 计算金额. 假设两种帐单计算方法不同, 而传入的Bill对象可能是两种中的任何一种, 所以要用instanceof来判断：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp; double&nbsp; calculate(Bill&nbsp; bill){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(bill&nbsp; instanceof PhoneBill){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //计算电话帐单<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(bill&nbsp; instanceof&nbsp; GasBill){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //计算煤气帐单<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>这样就可以用一个方法处理两种子类.<br>然而, 这种做法通常被认为是没有好好利用面向对象中的多态性.&nbsp; 其实上面的功能要求用方法重载完全可以实现, 这是面向对象编成应有的做法, 避免回到结构化编程模式. 只有提供两个名字和返回值都相同, 接受参数类型不同的方法就可以了:&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public double calculate(PhoneBill bill){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //计算电话帐单<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public double calculate(GasBill&nbsp; bill){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //计算燃气帐单<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>所以,&nbsp; 使用instanceof在绝大多数情况下并不是推荐的做法, 应当好好利用多态.
<img src ="http://www.blogjava.net/gavinju/aggbug/128195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gavinju/" target="_blank">HandSoft</a> 2007-07-04 22:17 <a href="http://www.blogjava.net/gavinju/archive/2007/07/04/128195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL 程序包结构优化_1</title><link>http://www.blogjava.net/gavinju/archive/2007/07/04/128150.html</link><dc:creator>HandSoft</dc:creator><author>HandSoft</author><pubDate>Wed, 04 Jul 2007 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/gavinju/archive/2007/07/04/128150.html</guid><wfw:comment>http://www.blogjava.net/gavinju/comments/128150.html</wfw:comment><comments>http://www.blogjava.net/gavinju/archive/2007/07/04/128150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gavinju/comments/commentRss/128150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gavinju/services/trackbacks/128150.html</trackback:ping><description><![CDATA[<p>PL/SQL程序包中，<br>方法一：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包头：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create or replace package&nbsp;&nbsp; XXXX_X_XXX_PKG&nbsp;&nbsp;&nbsp; is</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE&nbsp;&nbsp; A(errbuf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT VARCHAR2,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT&nbsp;&nbsp;&nbsp; VARCHAR2,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; NUMBER);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end XXXX_X_XXX_PKG&nbsp;;<br><br>&nbsp;注：包头中声明一个Procedure, 包体中声明一个主Procedure(例如: A),多个从Procedure(一般是些共用方法)(例如：B), 注意包体中Procedure实现次序，应先声明B ,<br>在A过程里，可以调用B.<br><br>方法二:&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包头:&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create or replace package&nbsp;&nbsp; XXXX_X_XXX_PKG&nbsp;&nbsp;&nbsp; is</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE&nbsp;&nbsp;&nbsp; A(errbuf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT VARCHAR2,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT&nbsp;&nbsp;&nbsp; VARCHAR2,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; NUMBER);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE&nbsp;&nbsp;&nbsp; B(&nbsp;retcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp; VARCHAR2,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2,);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end XXXX_X_XXX_PKG&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包体中,此时A可以直接引用B,不论实现次序.<br><br></p>
<img src ="http://www.blogjava.net/gavinju/aggbug/128150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gavinju/" target="_blank">HandSoft</a> 2007-07-04 17:16 <a href="http://www.blogjava.net/gavinju/archive/2007/07/04/128150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle PL/SQL 存储过程一般写法</title><link>http://www.blogjava.net/gavinju/archive/2007/06/29/127072.html</link><dc:creator>HandSoft</dc:creator><author>HandSoft</author><pubDate>Fri, 29 Jun 2007 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/gavinju/archive/2007/06/29/127072.html</guid><wfw:comment>http://www.blogjava.net/gavinju/comments/127072.html</wfw:comment><comments>http://www.blogjava.net/gavinju/archive/2007/06/29/127072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gavinju/comments/commentRss/127072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gavinju/services/trackbacks/127072.html</trackback:ping><description><![CDATA[<p>procedure</p>
<p>begin<br>&nbsp; BEGIN&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; SELECT attribute5<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTO l_list_name<br>&nbsp;&nbsp;&nbsp; FROM&nbsp;&nbsp; qp_list_headers_all<br>&nbsp;&nbsp;&nbsp; WHERE list_header_id = p_list_header_id ;<br>&nbsp; exception<br>&nbsp;&nbsp;&nbsp; when others then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise targetListNameError;<br>&nbsp; end;<br>exception</p>
<p>&nbsp;&nbsp;&nbsp; WHEN targetListNameError THEN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- fnd_file.put_line(fnd_file.output , rpad(upload_list.item_number,20,' ')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||'Start date should later than the current latest effective start data of the target price list.');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --此信息输出到EBS平台中View Output中。fnd_file.log:&nbsp; 输出到Log中<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbms_output.put_line('Target List is Null!');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --注意: 此信息用于输出到PL/SQL Developer控制台中。<br>END;</p>
<img src ="http://www.blogjava.net/gavinju/aggbug/127072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gavinju/" target="_blank">HandSoft</a> 2007-06-29 14:49 <a href="http://www.blogjava.net/gavinju/archive/2007/06/29/127072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java复制对象属性org.apache.commons.beanutils.BeanUtils...用法感悟</title><link>http://www.blogjava.net/gavinju/archive/2007/04/11/109836.html</link><dc:creator>HandSoft</dc:creator><author>HandSoft</author><pubDate>Wed, 11 Apr 2007 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/gavinju/archive/2007/04/11/109836.html</guid><wfw:comment>http://www.blogjava.net/gavinju/comments/109836.html</wfw:comment><comments>http://www.blogjava.net/gavinju/archive/2007/04/11/109836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gavinju/comments/commentRss/109836.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gavinju/services/trackbacks/109836.html</trackback:ping><description><![CDATA[<p>在Strut中,实现table中复制一行的功能<br>line[j]是要复制的一行,Action中可以获取到要复制的行的ID.<br>因为line[j]中有很多属性,要是一个一个的属性去get,然后set的话,代码量会<br>很大,而且会出现很多冗余代码。<br>这是我要复制出来的一行<br>if (j == rowId &amp;&amp; !line[j].getNewRecord()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowList.add(line[j]);<br>&nbsp;&nbsp;&nbsp;&nbsp; //将这一行全部复制<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>现在要使得其中的某几个属性复制出来为空<br>则需要一个一个的set,get.<br>if (j == rowId &amp;&amp; !line[j].getNewRecord()) {<br>&nbsp;&nbsp;&nbsp; CreateDeliveryLineRow&nbsp; cdlr = new CreateDeliveryLineRow&nbsp;&nbsp;();<br>&nbsp;&nbsp;&nbsp; if(line[j].getMfgLot() != null){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cdlr.setMfgLot = null;<br>&nbsp;&nbsp;&nbsp;}<br>。。。。。。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowList.add(cdlr);<br>&nbsp;&nbsp;&nbsp;&nbsp; //将这一行全部复制<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>以下是比较好的解决方案:<br>利用apache的common类中的BeanUtils来实现对象属性的复制<br>if (j == rowId &amp;&amp; !line[j].getNewRecord()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;CreateDeliveryLineRow row = new CreateDeliveryLineRow();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;BeanUtils.copyProperties(row,line[j]);　　　//复制出对象line[j],将其属性赋予row<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row.setQuantity(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在row中轻松的实现对某几个属性的控制<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;row.setMfgLot(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;row.setMiniQuantity(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;row.setBoxQuantity(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rowList.add(row);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //rowList.add(cdr);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>===================================================<br>CreateDeliveryForm getForm = (CreateDeliveryForm) form;<br>。。。。。。<br>CreateDeliveryLineRow[] line = getForm.getLine();<br>if (line != null &amp;&amp; line instanceof CreateDeliveryLineRow[]) {<br>&nbsp;&nbsp;&nbsp;int size = line.length;</p>
<p>&nbsp;&nbsp;&nbsp;for (int j = 0; j &lt; size; j++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;if (!line[j].getNewRecord() &amp;&amp; !line[j+1].getNewRecord()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (line[j].getBoxQuantity() == 0L) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[j].setBoxQuantity(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (line[j].getMiniQuantity() == 0L) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[j].setMiniQuantity(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (line[j].getQuantity() == 0D) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[j].setQuantity(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowList.add(line[j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;if (j == rowId &amp;&amp; !line[j].getNewRecord()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;CreateDeliveryLineRow row = new CreateDeliveryLineRow();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;BeanUtils.copyProperties(row,line[j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;row.setQuantity(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;row.setMfgLot(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;row.setMiniQuantity(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;row.setBoxQuantity(null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rowList.add(row);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //rowList.add(cdr);<br>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}</p>
。。。。。。<br>request.setAttribute("results", rowList);
<img src ="http://www.blogjava.net/gavinju/aggbug/109836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gavinju/" target="_blank">HandSoft</a> 2007-04-11 10:40 <a href="http://www.blogjava.net/gavinju/archive/2007/04/11/109836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dwr---example</title><link>http://www.blogjava.net/gavinju/archive/2007/01/21/95188.html</link><dc:creator>HandSoft</dc:creator><author>HandSoft</author><pubDate>Sun, 21 Jan 2007 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/gavinju/archive/2007/01/21/95188.html</guid><wfw:comment>http://www.blogjava.net/gavinju/comments/95188.html</wfw:comment><comments>http://www.blogjava.net/gavinju/archive/2007/01/21/95188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gavinju/comments/commentRss/95188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gavinju/services/trackbacks/95188.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">1. 在web.xml文件中注册dwr<br />   &lt;servlet&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;display-name&gt;DWR Servlet&lt;/display-name&gt;<br />    &lt;description&gt;Direct Web Remoter Servlet&lt;/description&gt;<br />    &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;<br />    &lt;init-param&gt;<br />        &lt;param-name&gt;debug&lt;/param-name&gt;<br />        &lt;param-value&gt;true&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br /> &lt;/servlet&gt;<br /> &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;<br /> &lt;/servlet-mapping&gt;</font>
		</p>
		<p>
				<font size="2"> &lt;welcome-file-list&gt;<br />    &lt;welcome-file&gt;search.jsp&lt;/welcome-file&gt;<br /> &lt;/welcome-file-list&gt;<br /><br />2.dwr.xml<br /> &lt;dwr&gt;<br />    &lt;allow&gt;&lt;convert convert="bean"  match="dwr.sample.Apartment"/&gt;<br />    &lt;create&gt;<br />           &lt;creator="new" javascript="ApartmentDAO" class="dwr.sample.ApartmentDAO"&gt;<br />                  &lt;include method="findApartments"/&gt;<br />                  &lt;include method="countApartments"/&gt;<br />           &lt;/creator&gt;<br />    &lt;/create&gt;<br />    &lt;/allow&gt;<br />&lt;/dwr&gt;<br />3.DB<br />CREATE TABLE APARTMENTS (id INTEGER, bedrooms INTEGER, bathrooms INTEGER, price INTEGER, address VARCHAR, city VARCHAR, province VARCHAR);<br />INSERT INTO APARTMENTS VALUES (16001, 1, 1, 850, '123 King St. East', 'Toronto', 'ON');<br />INSERT INTO APARTMENTS VALUES (16002, 2, 1, 1000, '1023 Yonge Ave.', 'Toronto', 'ON');<br />INSERT INTO APARTMENTS VALUES (16003, 2, 2, 1050, '27 Winchester St.', 'Toronto', 'ON');<br />4.Apertment.java<br />普通的javabean<br />5.DBUtils.java<br />   数据库链接类<br />   public class DBUtils {</font>
		</p>
		<p>
				<font size="2"> /*<br />  * Creates the sample data (table and records). <br />  */<br /> public static void setupDatabase(BufferedReader reader) {<br />  Connection c = null;<br />  Statement stmt = null;<br />  try {<br />   c = openConnection();<br />   stmt = c.createStatement();<br />   // reads the file with the SQL statements<br />   String line;<br />   while ((line = reader.readLine()) != null) {<br />    stmt.execute(line);<br />   }<br />   stmt.close();<br />   c.close();<br />  } catch (IOException e) {<br />   e.printStackTrace();<br />  } catch (SQLException e) {<br />   e.printStackTrace();<br />  } finally {<br />   try {<br />    stmt.close();<br />    c.close();<br />   } catch (SQLException e) {<br />    e.printStackTrace();<br />   }<br />  }<br /> }<br /> <br /> /*<br />  * Opens a database connection. <br />  */<br /> public static Connection openConnection() throws SQLException {<br />  Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:dwr-sample", "sa", "");<br />  return c;<br /> }<br /> <br />}<br /><br />6.ContextListener.java<br />   实现了ServletContextListerer接口的类<br />   public class ContextListener implements javax.servlet.ServletContextListener {</font>
		</p>
		<p>
				<font size="2"> /**<br />  * This method is invoked when the Web Application has been removed and is<br />  * no longer able to accept requests.<br />  * @param event<br />  */<br /> public void contextDestroyed(ServletContextEvent event) {<br /> }</font>
		</p>
		<p>
				<font size="2"> /**<br />  * This method is invoked when the Web Application is ready to service requests. <br />  * @param event<br />  */<br /> public void contextInitialized(ServletContextEvent event) {<br />  try {<br />   // load the driver<br />   Class.forName("org.hsqldb.jdbcDriver");<br />   // create the table and add sample data<br />   InputStreamReader in = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("db.sql"));<br />   BufferedReader reader = new BufferedReader(in);<br />   DBUtils.setupDatabase(reader);<br />  } catch (ClassNotFoundException e) {<br />   e.printStackTrace();<br />  }<br />  <br /> }</font>
		</p>
		<p>
				<font size="2">}<br />7.ApartmentDAO.java<br />   业务逻辑层<br />   public class ApartmentDAO {<br /> <br /> /**<br />  * Returns the available apartments based on the search criteria.<br />  * @param bedrooms minimum number of bedrooms<br />  * @param bathrooms minimum number of bathrooms<br />  * @param price maximum price to be paid<br />  * @return<br />  */<br /> public Collection findApartments(int bedrooms, int bathrooms, int price) {<br />  Collection list = new Vector();<br />  String sql = "select * from APARTMENTS" + <br />    createSearchWhereClause(bedrooms, bathrooms, price) + <br />    "order by bedrooms, bathrooms, price";</font>
		</p>
		<p>
				<font size="2">  // define db variables<br />  Connection c = null;<br />  Statement stmt = null;<br />  try {<br />   c = DBUtils.openConnection();<br />   stmt = c.createStatement();<br />   // just run the sql statement<br />   ResultSet rs = stmt.executeQuery(sql);<br />   while(rs.next()) {<br />    Apartment apartment = this.getApartment(rs);<br />    list.add(apartment);<br />   }<br />  } catch (SQLException e) {<br />   e.printStackTrace();<br />  } finally {<br />   try {<br />    stmt.close();<br />    c.close();<br />   } catch (SQLException e) {<br />    e.printStackTrace();<br />   }<br />  }</font>
		</p>
		<p>
				<font size="2">  return list;<br /> }<br /> <br /> /**<br />  * Returns the number of available apartments based on the search criteria.<br />  * @param bedrooms minimum number of bedrooms<br />  * @param bathrooms minimum number of bathrooms<br />  * @param price maximum price to be paid<br />  * @return<br />  */<br /> public int countApartments(int bedrooms, int bathrooms, int price) {<br />  String sql = "select count(*) as total from APARTMENTS" + createSearchWhereClause(bedrooms, bathrooms, price);<br />  int numberApartments = -1;<br />  // define db variables<br />  Connection c = null;<br />  Statement stmt = null;<br />  try {<br />   c = DBUtils.openConnection();<br />   stmt = c.createStatement();<br />   // just run the sql statement<br />   ResultSet rs = stmt.executeQuery(sql);<br />   if (rs.next()) {<br />    numberApartments = rs.getInt("total");<br />   }<br />  } catch (SQLException e) {<br />   e.printStackTrace();<br />  } finally {<br />   try {<br />    stmt.close();<br />    c.close();<br />   } catch (SQLException e) {<br />    e.printStackTrace();<br />   }<br />  }<br />  <br />  return numberApartments;<br /> }<br /> <br /> /**<br />  * Creates a Unit object from the database.<br />  * @param rs<br />  * @return<br />  * @throws SQLException<br />  */<br /> private Apartment getApartment(ResultSet rs) throws SQLException {<br />  Apartment ap = new Apartment();<br />  ap.setId(rs.getInt("id"));<br />  ap.setAddress(rs.getString("address"));<br />  ap.setBedrooms(rs.getInt("bedrooms"));<br />  ap.setBathrooms(rs.getInt("bathrooms"));<br />  ap.setPrice(rs.getInt("price"));<br />  ap.setCity(rs.getString("city"));<br />  ap.setProvince(rs.getString("province"));<br />  return ap;<br /> }<br /> <br /> <br /> /**<br />  * Creates the where clause for the search SQL statement.<br />  * @param bedrooms<br />  * @param bathrooms<br />  * @param price<br />  * @return<br />  */<br /> private String createSearchWhereClause(int bedrooms, int bathrooms, int price) {<br />  String where = " where bedrooms &gt;= " + bedrooms + <br />    " and bathrooms &gt;= " + bathrooms +<br />    " and price &lt; " + price;<br />  return where;<br /> }</font>
		</p>
		<p>
				<font size="2">}<br />8. search.jsp<br />  &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />  &lt;title&gt;DWR Example&lt;/title&gt;</font>
		</p>
		<p>
				<font size="2">   &lt;style type="text/css" media="screen"&gt;<br />       @import url( style.css );<br />   &lt;/style&gt;  <br />  <br />  &lt;script src='dwr/interface/ApartmentDAO.js'&gt;&lt;/script&gt;<br />  &lt;script src='dwr/engine.js'&gt;&lt;/script&gt;<br />  &lt;script src='dwr/util.js'&gt;&lt;/script&gt;<br />  &lt;script&gt;<br />  <br />  function updateTotal() {<br />    $("resultTable").style.display = 'none';<br />    var bedrooms = document.getElementById("bedrooms").value;<br />    var bathrooms = document.getElementById("bathrooms").value;<br />    var price = document.getElementById("price").value;<br />    ApartmentDAO.countApartments(loadTotal, bedrooms, bathrooms, price);<br />  }</font>
		</p>
		<p>
				<font size="2">  function updateResults() {<br />    DWRUtil.removeAllRows("apartmentsbody");<br />    var bedrooms = document.getElementById("bedrooms").value;<br />    var bathrooms = document.getElementById("bathrooms").value;<br />    var price = document.getElementById("price").value;<br />    ApartmentDAO.findApartments(fillTable, bedrooms, bathrooms, price);<br />    $("resultTable").style.display = '';<br />  }<br />  <br />  var getId = function(unit) { return unit.id };<br />  var getAddress = function(unit) { return unit.address };<br />  var getBedrooms = function(unit) { return unit.bedrooms };<br />  var getBathrooms = function(unit) { return unit.bathrooms };<br />  var getPrice = function(unit) { return unit.price };<br />    <br />  function loadTotal(data) {<br />    document.getElementById("totalRecords").innerHTML = data;<br />  }<br />  <br />  function fillTable(apartment) {<br />    DWRUtil.addRows("apartmentsbody", apartment, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);<br />  }<br />  <br />&lt;/script&gt;</font>
		</p>
		<p>
				<font size="2">&lt;/head&gt;</font>
		</p>
		<p>
				<font size="2">&lt;body onload="updateTotal();"&gt;</font>
		</p>
		<p>
				<font size="2">&lt;h2&gt;Find an apartment to rent&lt;/h2&gt;</font>
		</p>
		<p>
				<font size="2">&lt;table border="0"&gt;<br />&lt;form name="rentalForm"&gt;<br />  &lt;tr width="400"&gt;<br />   &lt;td width="100"&gt;City&lt;/td&gt;<br />   &lt;td width="300"&gt;Toronto&lt;/td&gt;<br />  &lt;/tr&gt;<br />  &lt;tr&gt;<br />   &lt;td&gt;Beds&lt;/td&gt;<br />   &lt;td&gt;<br />    &lt;select id="bedrooms" onchange="updateTotal()"&gt;<br />     &lt;option value="1"&gt;1 or more&lt;/option&gt;<br />     &lt;option value="2"&gt;2 or more&lt;/option&gt;<br />     &lt;option value="3"&gt;3 or more&lt;/option&gt;<br />     &lt;option value="4"&gt;4 or more&lt;/option&gt;<br />    &lt;/select&gt;<br />   &lt;/td&gt;<br />  &lt;/tr&gt;</font>
		</p>
		<p>
				<font size="2">  &lt;tr&gt;<br />   &lt;td&gt;Baths&lt;/td&gt;<br />   &lt;td&gt;<br />    &lt;select id="bathrooms" onchange="updateTotal()"&gt;<br />     &lt;option value="1"&gt;1 or more&lt;/option&gt;<br />     &lt;option value="2"&gt;2 or more&lt;/option&gt;<br />     &lt;option value="3"&gt;3 or more&lt;/option&gt;<br />     &lt;option value="4"&gt;4 or more&lt;/option&gt;<br />    &lt;/select&gt;<br />   &lt;/td&gt;<br />  &lt;/tr&gt;</font>
		</p>
		<p>
				<font size="2">  &lt;tr&gt;<br />   &lt;td&gt;Price&lt;/td&gt;<br />   &lt;td&gt;<br />    &lt;select id="price" onchange="updateTotal()"&gt;<br />     &lt;option value="800"&gt;under $800&lt;/option&gt;<br />     &lt;option value="1000"&gt;under $1,000&lt;/option&gt;<br />     &lt;option value="1250"&gt;under $1,250&lt;/option&gt;<br />     &lt;option value="1500" selected="selected"&gt;under $1,500&lt;/option&gt;<br />     &lt;option value="1800"&gt;under $1,800&lt;/option&gt;<br />     &lt;option value="2000"&gt;under $2,000&lt;/option&gt;<br />    &lt;/select&gt;<br />   &lt;/td&gt;<br />  &lt;/tr&gt;</font>
		</p>
		<p>
				<font size="2">  &lt;tr&gt;<br />   &lt;td colspan="2"&gt;<br />    &lt;blockquote&gt;<br />     Available apartments: &lt;span id="totalRecords" style="font-weight:bold;"&gt;&lt;/span&gt;<br />    &lt;/blockquote&gt;<br />   &lt;/td&gt;<br />  &lt;/tr&gt;</font>
		</p>
		<p>
				<font size="2">&lt;/form&gt;<br />&lt;/table&gt;</font>
		</p>
		<p>
				<font size="2">&lt;p&gt;&lt;input type="button" value="Show results!" onClick="updateResults();"&gt;&lt;/p&gt;</font>
		</p>
		<p>
				<font size="2">&lt;div id="resultTable"&gt;</font>
		</p>
		<p>
				<font size="2">&lt;h2&gt;Results&lt;/h2&gt;</font>
		</p>
		<p>
				<font size="2"> &lt;table border="1"&gt;<br />  &lt;thead&gt;<br />    &lt;tr&gt;<br />      &lt;th width="40"&gt;Id&lt;/th&gt;<br />      &lt;th width="180"&gt;Address&lt;/th&gt;<br />      &lt;th width="60"&gt;Beds&lt;/th&gt;<br />      &lt;th width="60"&gt;Baths&lt;/th&gt;<br />      &lt;th width="60"&gt;Price&lt;/th&gt;<br />    &lt;/tr&gt;<br />  &lt;/thead&gt;<br />  &lt;tbody id="apartmentsbody"&gt;</font>
		</p>
		<p>
				<font size="2">  &lt;/tbody&gt;<br /> &lt;/table&gt;<br />&lt;/div&gt;</font>
		</p>
		<p>
				<font size="2">&lt;/body&gt;<br />&lt;/html&gt;<br /><br />由于项目需要,需在我们现有的struts、hibernate工程上集成ajax功能.项目组决定使用Dwr.<br />刚开始研究Dwr.觉得真的很不错, 只需很少量的代码,就能在现有的工程上集成ajax技术. 期待Dwr有更辉煌的明天！<br />喜欢Dwr技术的IT界朋友可以与本人联系！望提出好的意见与建议.</font>
		</p>
<img src ="http://www.blogjava.net/gavinju/aggbug/95188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gavinju/" target="_blank">HandSoft</a> 2007-01-21 23:35 <a href="http://www.blogjava.net/gavinju/archive/2007/01/21/95188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>