Re: [J2SE] Servlet動態產生html的元件問題
※ 引述《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
02/19 01:45, 1F
→
02/19 01:47, , 2F
02/19 01:47, 2F
→
02/19 01:49, , 3F
02/19 01:49, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):