Re: [J2SE] Servlet動態產生html的元件問題

看板java作者 (痞子軍團團長)時間14年前 (2012/02/18 15:10), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《tkcn (小安)》之銘言: : ※ 引述《Killercat (殺人貓™)》之銘言: : : asp.net有類似HtmlTableController的東西可以動態產生html碼,所以java有沒有這種? : : 可能類似 : : HtmlTable table = new HtmlTable(); : : table.addCaptain("Web App Name : "); : : for(FooObj obj : objlists) : : table.addRow(new HtmlTD(obj.getName()), : : new HtmlTD(obj.getDir()), : : new HtmlTD()...); : : out.println(table.generateHTML()); : : 這樣的東西? : 有的, : 在 Google Web Toolkit (GWT) 2.0 "之前" 的版本, : code 差不多就是長這樣。 哪有這麼討厭... ==.==== 明明 Grid 跟 FlexTable 根本不用管 <tr> <td> 直接 table.setText(col, row, " blahblah"); 要空格跳格都沒關係(當然,如果 border 跟 css 沒弄好會有點醜) 要塞其他 widget (component) 也沒問題(table.setWidget()) 無聊一點也可以用 VerticalPanel 跟 HorizontalPanel 慢慢弄 [毆飛] : 之所以特別強調 "之前",是因為 2.0 以後多了 uiBinder, : 撇開一些細節不談,這東西其實有點像是其他語言中的 Template。 小聲說:UiBinder 不太能對付表格狀的東西 [毆飛] : 簡單的說就是,UI 相關的 code 如 HTML, CSS 仍然如同靜態網頁的寫法, : 只將需要動態改變的部份,用特殊的語法標示出來,方面程式將需要的資料塞入其中。 : 相較於 HTML, CSS, JavaScript 全塞在 JSP/Servlet 的作法, : 使用 Template 也有助於美工與程式設計師之間的合作。 而且還有 GWT Designer(base on WindowBuilder) 想要 WYSIWYG 也可以! : 總而言之,GWT 即使在 2.0 之後,依然支援舊的 UI 使用方式, : 然而我個人目前還是比較喜歡 uiBinder/Template 的作法。 還有一個 2.0 以後的大絕招,叫 Cell Widget 例如你要作一個顯示 Foo 這個 pojo 的清單 假設 Foo 長這樣 class Foo{ String name; Date date; int x; int y; //skip getter, setter, constructor and blahblah } 那麼 //這是主角 CellTable<Foo> list = new CellTable<Foo>(); //讓日期好看 & 炫耀的多餘物 XD DateTimeFormat format = DateTimeFormat.getFormat("MM/dd"); //設定各個 column 要怎麼顯示 TextColumn<Foo> nameClmn = new TextColumn<Foo>{ public String getValue(Foo vo){ return vo.getName(); } } TextColumn<Foo> dateClmn = new TextColumn<Foo>{ public String getValue(Foo vo){ return format.format(vo.getDate()); } } TextColumn<Foo> numClmn = new TextColumn<Foo>{ public String getValue(Foo vo){ return "("+vo.getX()+","+vo.getY()+")"; } } //設定 column 的先後順序、還有 <th> 叫啥 list.addColumn(nameClmn, "名字"); list.addColumn(dateClmn, "日期"); list.addColumn(numClmn, "座標"); //最後設定資料來源 AsyncDataProvider<Foo> dataProvider = new AsyncDataProvider<Foo>(){ //牽扯到 GWT RPC,先跳過 //簡單地說就是在這裡向 server 要資料 } dataProvider.addDataDisplay(list); //也有 SelectionModel 可以設定點選某 row 之後的動作 //還附送分頁機制,基本上兩三行解決,還不用一次全部 load 回來 打完收工! 搭配 UiBinder 來配置 layout 也沒問題 \囧/ 還有其他的 Cell 系列 widget 可以用 \囧/ 要客製化自己的 Cell widget 也不是問題 \囧/ 就這麼簡單、就這麼 Java、還不趕快弄一套來用 [咦咦?] 當然,我不會那麼壞心隱藏糟糕點 →Cell Widget 背後運作原理相當複雜、class hierarchy 互相糾結 在土砲地追了一兩天 source code 甚至懷疑裡頭有重複呼叫 method 的嫌疑 (僅供參考 XD) →這導致如果你要用 CellTable 作一些本身規格以外的事情 會有一種使不上力、也不知要無從改起的困擾 (這很可能只是個人程度問題 Orz) 在小量資料、需要一些額外操作的 pojo 我會選擇自己刻 widget [炸] : 如果你先前沒接觸過相關的知識, : 不妨先去了解一下其他語言如 JSP,使用 Template 的方式, 還是一樣,把糟糕點一起講一講 GWT 可以用 Java 寫網頁的很歡樂, 這裡只講「畫面組成可以多 Java」 但是 →運氣不好還是需要了解網頁的 rendering 機制 就像真正下去寫 Swing 還是會遇到 rendering 機制的問題 只是現在面對的是瀏覽器的機制 如果會 CSS、或身邊有會 CSS 的人一起配合會少一點鬼打牆的狀況 例如為甚麼(在某些瀏覽器)add 一個 widget 會沒反應 但是 setSize() 之後就正常 他們那種每天在算 margin/padding 的人,通常會對這種東西很了解 →跟傳統 JSP/PHP 比起來,debug 會困難一點 畢竟傳統 JSP/PHP... 說穿了就是字串操作 當然,如果你有打算卡 AJAX 我想其他解決方案也差不多痛苦、也許 jQuery 派會容易些 但是 GWT 要抓 rendering 機制造成的錯誤,真的還蠻痛苦的 →目前 development mode 下,實際操作的反應的確不太快 按個 button 都可以 lag 個一秒鐘才有反應 這對作遊戲的可能更明顯,參閱這篇 http://pt2club.blogspot.com/2011/02/gwt-html5.html 當然,實際 deploy 成 JS 就不會有速度上的困擾 : 如果仍然不習慣,那... : 歡迎你加入 GWT 陣營 \囧/ 錯錯錯!當然是「不管你習不習慣...」 歡迎你加入 GWT 陣營 \囧/ ==== 總之,不要再用 servlet 兜畫面了...... [炸] -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.12.165

02/19 01:45, , 1F
其實當初是不想跑iis/mono才選我也很熟練的java XD
02/19 01:45, 1F

02/19 01:47, , 2F
而且我本來就在開android,很多code module可以重用
02/19 01:47, 2F

02/19 01:49, , 3F
不過說真的新大陸也滿好玩的,來玩玩看吧(?) XD
02/19 01:49, 3F
文章代碼(AID): #1FFqxeym (java)
文章代碼(AID): #1FFqxeym (java)