痞客邦的第二篇,還不太熟怎麼用。
進行POC過程發現如果XML不是檔案,而是字串,JDOM如何去parse? 這以前晃兄有教過一次。
StringReader sr = new StringReader(xmlString);
Document doc = builder.build(sr);

Jemmy 發表在 痞客邦 留言(0) 人氣()


這是我遷移到痞客邦後第一篇Blog,沒想到對岸朋友還是無法分享。
在新的PC試玩Android,結果明明有裝JDK,Path和JAVA_HOME都有設置,結果安裝Android SDK Tool的installer執行檔回應:JDK not found。
經Google大師裁示,目前Android SDK只支援32 bit,而我是安裝64bit,所以得安裝32 bit的JDK

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Java Script的世界一向隨便,非我族類的一套library反而是種嚴謹,而對習慣隨便寫Java Script的我,花了半天才找到解法。問題如下: HTML內文

<div class="demo_jui">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="table_grid">
    <thead>
        <tr>
            <th width="20%">編號</th>
            <th width="80%">群組</th>
        </tr>
    </thead>
    <tbody id="tableBody">
    </tbody>
</table>
</div>

使用jQuery的DataTables.js去修飾table_grid

$(document).ready(function() {      
    oTable = $('#table_grid').dataTable({     
        "bJQueryUI": true,                    
        "sPaginationType": "full_numbers",    
        "bProcessing": true,
        "iDisplayLength": 5
} );

動態生成reocrd

function buildTable(tableData) {
    var tableBody = $("#tableBody");
    tableBody.html("");
    //add the table rows
    $.each(tableData, function(i){
    tableBody.append('<tr></tr>');
    var tr = $('tr:last', tableBody);
        tr.append('<td>' + tableData[i].id + '</td>');
        tr.append('<td>' + tableData[i].group + '</td>');
    });
};

  結果呢?資料正常顯示,但分頁、排序的功能完全無效,後來才知道,既然使用了DataTables.js,就要用它的function去動態生成,雖同屬jQuery,不能用純jQuery語法生成。改法如下:

var oTable;        // 宣告為global變數
function buildTable(tableData) {
    oTable.fnClearTable(0);    // 等同html("")
    $.each(tableData, function(i){
        oTable.fnAddData([     // 動態新增record
            tableData[i].id,
            tableData[i].group
        ]);
    });
    oTable.fnDraw();           // 重新繪製
};

  那麼誰去call buildTable呢?是Ajax:

function querySubmit() {
    dataString = $("#myForm").serialize();
    $.ajax({
        url: '<c:out value="${ctx}"/>/query.do',
        type: 'POST',
        data: dataString,
        dataType: 'json',
        success: function(data, status){
            buildTable(data);
        },
        error: function(xhrInstance, status, xhrException) {
            alert("failure:" + status);
        }
    });
    return true;
}

Jemmy 發表在 痞客邦 留言(0) 人氣()

  java.lang.IllegalStateException: Committed。大多出現在sendRedirect或forward時發生,通常解法是: request.setAttribute("result", finaldata); request.getRequestDispatcher("calculation.jsp").forward(request, response); // 因為request的attribute屬性要隨著forward跳轉。   而我在Struts 1開發時也有這個問題,當我google到上述解法時,才恍然原來我是用Ajax去call Struts的Action並以JSON回傳,也就是我在Action的內容如下:

JSONArray json = JSONArray.fromObject(list);
logger.debug(json.toString());
PrintWriter out=response.getWriter();
out.println(json);
out.flush();
return null; // error: return mapping.findForward("success");

  因為使用response的getWriter來print和Struts1的findForward等於做了重複的output,out.print可以正常顯示結果後執行findForward就出現上述異常了。

Jemmy 發表在 痞客邦 留言(0) 人氣()


  寫Web一直以來是我的罩門,但同事會信的沒多少,認為這對我應該不難,其實下意識覺得我是救世"僕"。想拿回借出去的書參考,結果它們全被擺在家裡睡覺。
  Web搞不定,就記錄我在PostgreSQL的新發現:

  • JDBC承接serial型態都會出錯,用Long接說不能Cast成Integer、用Integer接說不能Cast成BigDecimal、用BigDecimal接卻又說不能Cast成Integer、用String接也說不能Cast成Integer。那怎麼辦咧?在SQL語法強轉型:select cast(serial_id as int) from table。cast不但可以將serial轉成int,也能將character varying轉成int。

  • PostgreSQL似乎沒有判斷NULL的function,NULLIF(var1, var2)是指當var1 = var2回傳Null,所以只好這麼改:select case when serial_id is null then –1 else serial_id end from table。典型的MSSQL語法。

  • 有個欄位放系統時間長整數,卻是字串格式,所以要format成顯示格式如下:select to_char(to_timestamp(to_number(origtime, '99999999999')), 'YYYY-MM-DD') from table。先to_number再to_timestamp後to_char,夠落落長吧!


  •   沒有餘額再開新的分類,就放在Oracle了。

    Jemmy 發表在 痞客邦 留言(0) 人氣()

      Lotus Notes其實也是有Schema的。取得方式如下:

    Form form = db.getForm("fmFoo");
    Vector<String> vec = form.getFields();
    System.out.println(vec.toString());

      之前討論過Form只是Document裡一個Item名,而getForm顯然是Notes Database物件特別針對Form屬性進行搜尋。其getFields是列出隸屬於該Form的Field。一度以為Item等同於Field,但顯然Form / Field與Document / Item之間還是有差異:
  • Form / Field:其實就等同Table的Schema,類似於Java Class地位。
  • Document / Item:類似於Java Instance地位。第一位document可能多出一些item,是第二份document所沒有,但item name只要不等於field name,基本上就只是屬該instance所有。
  •   結論是:
  • Form is an Item、Fields所列出的名字都是Item Name。但Item Name不一定就是Field Name,除非該Item Name同時為getFields裡的一個名字。
  • 業務邏輯上,Form代表一種Document的類型,而非實體。
  • Jemmy 發表在 痞客邦 留言(0) 人氣()

      利用在客戶端測試的空檔,測試Spring出品的Java Mail。

    import javax.mail.internet.MimeMessage;

    import org.springframework.mail.javamail.JavaMailSenderImpl;
    import org.springframework.mail.javamail.MimeMessageHelper;

    public class SpringMailer {

        public static void main(String[] args) throws Exception {
            JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
            javaMailSender.setHost("127.0.0.1");
            MimeMessage msg = javaMailSender.createMimeMessage();
            MimeMessageHelper msgHelper = new MimeMessageHelper(msg);
            msgHelper.setFrom("jemmy@from");
            msgHelper.setTo("spring@to");
            msgHelper.setSubject("Test Spring Mail!");
            msgHelper.setText("Spring");
            javaMailSender.send(msg);
        }
    }

    JavaMailSender是一個Interface,可以被Spring配置。這裡直接引用JavaMailSenderImpl,可以設置SMTP Host甚至它的login id/pwd。而setText還第二個參數,若為true則為html格式。

    Jemmy 發表在 痞客邦 留言(0) 人氣()

      在想移blog後,是不是要依抽象類別來分,如Maven、Ant甚至Git放到CM,Regex也包括Shell Script。臨時支援他人寫的程式,跳過Ant直接接觸Maven的我,注記一下Ant在manifest.mf生成dependency jar list的方法。 原來的Ant Script摘錄如下:

    <target name="build" depends="compile" description="Compile and generate jar">
        <jar destfile="${dist.dir}/compare.jar" compress="true" basedir="${temp.dir}">
        <manifest>
            <attribute name="Main-Class" value="${mainclass}"/>
            <attribute name="Class-Path" value="lib\commons-collections.jar lib\commons-pool.jar lib\commons-dbcp.jar lib\ojdbc14.jar lib\nls_charset12.jar lib\jdom.jar lib\log4j-1.2.12.jar"/>
        </manifest>
        </jar>
        <copy todir="${dist.dir}" preservelastmodified="true">
            <fileset dir="${source.dir}" includes="config.xml,run.bat" />
        </copy>
        <copy todir="${dist.dir}/lib" preservelastmodified="true">
            <fileset dir="${lib.dir}" includes="*.jar" />
        </copy>
    </target>

      如上述片段紅字,設定manifest.mf時,Class-Path後跟著是hard code。再擴充的話,就什麼都要加。若要改成自動讀lib目錄裡所有jar,如下: <attribute name="Class-Path" value="${libs.project}" />   那libs.project的property該如何設置,得在build.xml裡增加以下內容:

    <pathconvert property="libs.project" pathsep=" ">
        <mapper>
            <chainedmapper>
                <!-- remove absolute path –>
                <flattenmapper />
                <!-- add lib/ prefix –>
                <globmapper from="*" to="lib/*" />
            </chainedmapper>
        </mapper>
        <path>
            <!-- lib.dir contains all jar files, in several subdirectories –>
            <fileset dir="${lib.dir}">
                <include name="**/*.jar" />
            </fileset>
        </path>
    </pathconvert>

      看來設定似乎更累贅,但從英文注釋可以推敲是做什麼目的,設定一次就不擔心hard code拖累。Maven在export jar的manifest.mf也是如出一轍的複雜。

    Jemmy 發表在 痞客邦 留言(0) 人氣()

    netsh interface ip set address name="區域連線" source=dhcp
    netsh interface ip set dns "區域連線" source=dhcp

    Jemmy 發表在 痞客邦 留言(0) 人氣()

  • DateTime dateTime = session.createDateTime("2010-11-27:10:00:09");  // from java.sql.Date
  • DateTime dateTime = session.createDateTime("2010-11-27:10:00:09.000000000"); // from java.sql.TimeStamp
  • DateTime dateTime = session.createDateTime(new java.util.Date());
  •   在取得lotus.domino.DateTime物件後,就可以replaceItemValue("DateField", dateTime);。如此在NotesClient才會顯示Date/Time而非Text型態。   要search的話得借助Function了,如下: db.search("Form=\"fmFoo\" & @TextToTime(\"2010-11-27:10:00:09.000000000\")=DateField");   基本上若參數只到日期,精準度會比對到日期,若列出時分秒,精準度則比對到時分秒。

    Jemmy 發表在 痞客邦 留言(0) 人氣()

      Blog和Microblogging不同的是,Blog像是EJB的Enity Bean,而Microblogging則是Session Bean。楊淑君的黑襪事件就記錄Blog裡,表彰中韓在跆拳道比賽的黑暗惡質。   以前我對朋友說過一句話,但看到這黑襪事件,依然對這句話感到毛骨悚然。當對朋友要離開公司,也想保持好聚好散,但遺留的專案未結,我就對他說:把所有責任推給離開的人是最廉價的諉過手法。白色恐怖時期,國內首宗銀行搶案,刑警迫於破案壓力,刑求運將王迎先認罪,導致王迎先跳河自盡以表清白,而惡警仍諉過於畏罪自殺,直到確定劫犯是李師科時,當時刑求的惡警大多逃往大陸發跡。楊淑君被亞跆盟栽贓作弊,不但取消參加資格,甚至打算停權,乃至株連中華隊處份,斷人生路還要毀人名節,莫此為甚。   我個人遭逢指控栽贓經驗為數不少,最後以實力證明過不在己,使我更相信職場上:看風向,不如看對象。我相信大多朋友所說:跟對老板很重要。但這準則從不曾在彼得杜拉克等大師管理著作出現過:只有找對的人。但提昇到社會層次,我對[看風向,不如看對象]這話就有點心虛,命運乖蹇如王迎先,最後只能以死明志。讓我想到在Vibo案若不是因我祖母往生,暴露PM根本沒做人力備援的問題(PM自己也是人),若專案失敗便可能全歸責在我身上。王迎先之死也換來司法改革,錄口供必須有律師在場。   但楊淑君呢?不只國家層次,還是國際層次,中韓聯手坑殺選手生命,毀人名節。一個楊淑君不白之冤,縱然得雪,亞跆盟依然是南韓人操縱,先天優勢是跆拳道確實源自南韓,加上中國選手吳靜鈺是奪金重點對象。訴諸國際的結果我畢竟悲觀,如同拉法葉案纏訟最後是我們嬴了,但十年有了吧!這時一顆慧星如楊淑君的選手生命如因此閃逝,我想到了王迎先。我不會瞧不起亞跆會的梁振錫、洪性天乃至於中國技術人員同時是吳靜鈺的教練趙磊,人格本就卑劣如斯,何必正眼一看。但運動場上要勇冠三軍,其心技體要皆臻上品,所以金牌得主吳靜鈺即時是被動的在潛規則下拿到金牌,以平凡人角度或許不忍苛責於她,但以運動員的要求來說: 吳靜鈺,是我最看不起的人。

    Jemmy 發表在 痞客邦 留言(0) 人氣()

      在Windows 7 64bit跑Eclipse,用SVN提交或更新專案時,老彈出如下落落長視窗:

    Failed to load JavaHL Library.
    These are the errors that were encountered:
    no libapr-1 in java.library.path
    no libapriconv-1 in java.library.path
    D:\Soft\Ruby\bin\libeay32.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    D:\Soft\Ruby\bin\ssleay32.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    no libaprutil-1 in java.library.path
    no libsasl in java.library.path
    no libsvn_subr-1 in java.library.path
    no libsvn_delta-1 in java.library.path
    no libsvn_diff-1 in java.library.path
    no libsvn_wc-1 in java.library.path
    no libsvn_fs-1 in java.library.path
    no libsvn_repos-1 in java.library.path
    no libsvn_ra-1 in java.library.path
    no libsvn_client-1 in java.library.path
    no libsvnjavahl-1 in java.library.path
    no svnjavahl-1 in java.library.path
    no svnjavahl in java.library.path
    java.library.path = …

      也不知為何和Ruby有關,經Google指示,看來是JVM 64bit的問題,下載安裝64bit版的SVN Client就行了。參照http://www.sliksvn.com/en/download

    Jemmy 發表在 痞客邦 留言(0) 人氣()

    Blog Stats
    ⚠️

    成人內容提醒

    本部落格內容僅限年滿十八歲者瀏覽。
    若您未滿十八歲,請立即離開。

    已滿十八歲者,亦請勿將內容提供給未成年人士。