1read 100read
2012年3月プログラム219: 【ツール】 フレームワーク作成スレ 【ライブラリ】 (152)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
【C++】 DirectX初心者質問スレ Part36 【C】 (862)
オブジェクト指向の弊害 (131)
【Perl,PHP】LLバトルロワイヤル21【Ruby,Python】 (197)
Visual Studio 2010 Part18 (965)
【あなごる】anarchy golf! (280)
【.cmd】 バッチファイルスクリプト %8 【.bat】 (950)
【ツール】 フレームワーク作成スレ 【ライブラリ】
1 :12/01/27 言語やジャンルは不問、 勉強も兼ねて何か作ってみるスレッドです。
2 :12/01/27 >>1 がんばれ
3 :12/01/27 私はJavaでServletのフレームワークを作ります。 Apache ECSに最近のトレンド(AOPなど)を盛り込みます。 他の参加者も並行して何か開発してくれると お互いのモチべが長持ちしますよ!
4 :12/01/27 >>3 うん。がんばれ。
5 :12/01/27 フレームワークはバズワードだろwww
6 :12/01/28 >>1 どんなのをつくりたいのか、もうちょっと具体的に話そうか。 ECSってフレームワークじゃなくて、どちらかというとテンプレートエンジンの一種なんだが、 それにAOPを組み合わせるとどううれしいのだろう。 ちなみに http://jakarta.apache.org/ecs/ によると > As of 2010-09-01, the ECS project is retired. This is an archived site. とあるんだが大丈夫か。
7 :12/01/28 寝ろ
8 :12/01/28 このスレッドは天才pンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
9 :12/01/28 久々のライブラリスレに期待が高まる。 というわけで俺が作っているライブラリを晒す。 【車輪の】JunkUtil 1.0.18 安定版 公開【再発明】 http://sourceforge.jp/projects/junkutil/releases/
10 :12/01/28 どうして、京都大学霊長類研究所は、アイちゃんの、 スレ乱立を見過ごしてるの? 独自の板立ててそっちで実験するとかできないの? いまどき、主婦だって専用の板ぐらい立てられるぞ。 「関係者以外は書きこまないで下さい。」とか、何 お前らがエラソーに仕切ってんだよ、ハゲ! 糞スレをあちこちにポンポン乱立されちゃ迷惑なんだよ。 ったく、京都大学霊長類研究所は能無しの集まりかよ!
11 :12/01/28 >>6 何から説明したら話が早いでしょうかね。 単純なソースの例でもあればいいかもしれませんね。 >ECSってオワコンプロジェクトなんだが大丈夫か? ECSやWicketからアイデアを抽出しますが、 内部でライブラリとして使用するというわけではありません。 >ECSはテンプレートエンジンの一種なんだが ECSはXMLパーサに毛が生えただけのライブラリです。 私はServlet APIをラップしたフレームワークを作ります。 ページの遷移などのAction(Controller)も包括的に管理します。
12 :12/01/28 フレームワークはデプロイ時にクラスパスから Pageクラスを継承したステートレス・クラスを検索して生成(new)され、。 生成されたインスタンスはBinder(ハッシュ+シングルトン)に登録されます。 PageクラスはAction、View、 Action and Viewのうち一つ役割を持ちますが、 振る舞いはModelクラスを継承したクラスに委譲されなければなりません。 ここでのModelクラスはビジネスロジックのModelではなく、 Action Model、 View Model、つまりActionやViewの振る舞いを表します。 @Action(path={"index.html", "/sample.html"}) class SampleAction extends Page { __@Override __public void onGet(Event e){ // callback for http GET method ____Model model = SampleActionModel(); ____model.flow(e); __} } class SampleView extends Page { __public void onRender(Event e){ // @Overrideではない ____Model model = SampleViewModel(); ____model.flow(e); __} }
13 :12/01/28 ここではModelの最も単純な使い方に対する説明に留めます。 Modelは幾つかのprotected methodを順に呼び出します。 途中でエラーフラグを立てるとonError(Event e)をコールして サイクルを中断しますが、正常な場合には最後にonResult(Event e)がコールされます。 SampleActionからSampleViewをレンダリングする例です。 class SampleActionModel extends Model { __protected void onResult(Event e){ ____SampleView view = Binder.getPage(SampleView.class); ____view.onRender(e); __} } class SampleViewModel extends Model { __protected void onResult(Event e){ ____e.doPage(this); // draw HTML (何も出力されない) __} }
14 :12/01/28 ModelとHTML出力に関係がありますが、一端HTML出力に説明の焦点を絞ります。 Apache ECS同様に、JSPやVelocityスタイルではなくDOM形式でHTMLを扱います。 DOMは繰り返し処理など動的な変更に強力で、 JavaScript組み込みコンポーネントが作りやすい、学習性が高い利点があります。 しかしHTMLの大部分は静的であり、動的に生成されるのは商品リストのような わずかな領域です。この動的領域以外の領域をDOMのNodeオブジェクトで 生成するのは冗長なので、プレーンなHTMLファイルをinclude(DOMにマッピング)します。 (Wicketのコンポーネント指向と似ていますが、 Wicketの苦手な面、繰り返し処理などを改善しています)
15 :12/01/29 >>9 >◆nAEPJE5g0c welcome
16 :12/01/29 DOMはめんどくさい。
17 :12/01/29 >>16 Apache ECSの致命的な問題点(時代的制約)はそこにあります。 如何にDOM操作をCOCで省略するのか、本当に必要な箇所に限定するのか、 次回はそれに対するアイデアである以下を説明する予定です。 1. HTMLロード __ Node root = new Node("hello.html"); 2. HTMLのid属性で参照を取得 __ Node child = node.id("base"); // <base id="base" href="C:/project"/> __ child.attr("href", "http://localhost/sample/ "); 3. 動的領域Canvas, 繰り返しや表示・非表示、並べ替えの単位Group __ @Source(html="/WEB-INF/source/html/hoge.html") __ class SampleModel { __ __@Source(id="item_list") __ __Canvas item_list; // @Source id と Field name が等しい場合省略 __ __ __@Source(id="item") __ __Group item; __ __ __public void onModel(Event e){ __ ____for(int i=0; i<10; i++ ){ __ ______Node add = item.in(item_list); // Groupのクローンを取得 、子ノードとして追加 __ ______Node update = add.id("item_id", i); // 繰り返しごとの変更、idに[i]追加 __ ______update.addText("ID:"+i); // addText, addAttr, addNode __ __} __ }
18 :12/01/29 >>17 ほらな。めんどくさい。 [foreach 〜] <tr><td>${value}</td></tr> [/foreach] こんな感じでいいじゃないか。 HTMLなのだから、プログラム以外も書けるような形にすべき。
19 :12/01/29 > 2. HTMLのid属性で参照を取得 > __ Node child = node.id("base"); // <base id="base" href="C:/project"/> > __ child.attr("href", "http://localhost/sample/ "); prototypeやjQueryを見習ってCSSセレクタでやれ。 $('#base').attr('href', 'http://localhost/sample/'); これだけで終わりだ。
20 :12/01/29 >>18-19 >HTMLなのだから、プログラム以外も書けるような形にすべき。 タグライブラリっぽいものからjavaソースの自動生成がいいかなと 考えてたんですけど、先にVelocityとかJSF2調査したほうがいいかな。。。 <foreach> <tr><td><namespace:value/></td></tr> </foreach> >CSSセレクタでやれ。 HTML id を少しでも減らすのに良いですね。
21 :12/01/29 >>15 どうも 画面遷移はぶっちゃけServlet一個だけ作っておいて、 Pageオブジェクトとかに処理を委譲すると簡単。 PageServlet(以下の状態管理を行う) APage→A.HTML→GET/POST→APage(*1)→BPage→B.HTML └──←───←─┘(エラー時) *1で正規表現によるvalidationやエラーメッセージの設定などを行う。 この方式だとAPageクラスに処理を局所化できるので、プログラミングはかなり楽。 ASP.NETのポストバックでも似たような処理をしていると記憶している。
22 :12/01/29 >>21 のアーキティクチャはPerlで使ったんだけど、Javaにも 普通に応用できると思う。 各Pageオブジェクトは、基本的にはMapでパラメタを全部受け取り、 適宜チェックし取捨選択して(*1)次のPageオブジェクトに渡す。 Pageオブジェクトは毎回生成してもいいし、必要ならキャッシュしてもいい。 Perlのときは、出力にテンプレートエンジン(HTML::Template)を使った。 これはJavaのVelocityに相当するもので、Velocityなら、パラメタとして 受け取ったMapをそのまま渡せていいかもしれない。(*2) *1 ここが少し面倒だが、セキュリティ上しょうがない 良く使う正規表現などをまとめた、Validation専用のライブラリがあると楽。 *2 もちろんXSS対策など、セキュリティに配慮は必要だが。
23 :12/01/29 あとこれは反則かも知れないが、Applicationクラスをセッションに放り込んでおいて、 面倒な処理は全部そっちに丸投げするという方法もある。 各Pageで持っているのが面倒なパラメタや処理は、Applicationクラスに 記述する。たとえばクソ重いバッチ処理の起動や、ユーザの階級に合わせた処理など、 Pageから分離すべきタスクはけっこうある。 それを全部Applicationクラスに任せると、けっこう上手くいくのではないだろうか。 長々と書いたが、フレームワーク的にはAbstractPage、AbstractApplication、 それらに付属する個別の設定ファイル(Properties or INI or XML)、テンプレートエンジン などへの軽快なアクセスを提供することになる。
24 :12/01/29 ごちゃごちゃ説明しなくていいよ。 ようするに既存の○と同じ方式だろ? さっさと実装(再発明)でもしとけ。 話はそれからだ。
25 :12/01/29 >>24 >>9
26 :12/01/29 >>21 >Servlet一個だけ作っておいて~ それは内部での話しですね。 私の場合、ブラウザ・クライアントがURLにアクセスしたとき、 全てServlet Filter が割り込み、URLハッシュと関連づいた Pageクラスに委譲してるのでPage = HttpServletなんです。 (これは多くのJava系FWと同じ仕組みです) >ASP.NETのポストバック >セッションに放り込んでおいて、 面倒な処理は全部そっちに丸投げするという方法もある。 JavaのWicketステートフル・アーキテクチャと似てますね。 リダイレクトやセッションが増えて回線IO作るのが欠点ですが。
27 :12/01/29 メソッドチェーン導入しろ
28 :12/01/29 >>21 >この方式だとAPageクラスに処理を局所化できるので、 >プログラミングはかなり楽。 ページクラスに全部押し込むとステートレスにする必要があるので AOP(インジェクション・バイジェクション)でバリデーションとかするのを 諦める必要があります。 class hoge extends Model { __@Read.Session(name="money") __@Write.Session(name="money") __int money; __ __void onRead(Event e){} // Sessionからmoneyにインジェクション __void onModel(Event e){ if(money < 100) money++; } __void onWrite(Event e){} // moneyからSessionにアウトジェクション __void onResult(Event e){} read -> model -> write -> resultの順に実行 }
29 :12/01/30 AOPで幸せになれるとは限らないと思うけど……。
30 :12/01/30 >>AOPで幸せになれるとは限らないと思うけど……。 もちろんそうです。 場合によってはクラス変数増えまくりで 文字数は少なくてもソース行数が増える欠点があります。 まあSeasar, Spring, PlayみてもAOPでスコープ操作したり バリデーションするのが流行りみたいなので持ち出したアイデアです。 利点としては文字列リテラルが消せる場合があることです。 以下をAOPで置き換える例を示します。 Event e; Session session = e.getSession(); int money = (Integer)session.getAttr("money"); ↓ @Read.Session int money
31 :12/01/30 海外ではHAJO(Heavy Annotation Java Object)とかいう蔑称で SpringのAOPを叩いてる人もいるらしいですよ
32 :12/01/30 "Heavy Annotation Java Object"との一致はありません。
33 :12/01/30 >>30 の続き AOPを使わないApache Wicketでも 文字列リテラルが不便だったりしますね。 Page page; String id = "html_id"; TextField<String> txt = new TextField<String>(id); page.add(txt);
34 :12/01/30 Velocityを参照しろ
35 :12/01/30 1.getParameterMapを使ってパラメタを全部取得する。 2.そのMapに対して徹底したValidationと正規化を行う。 3.次にMapを元に処理を行う。 4.最期にそのMapをテンプレートエンジン(Velocity)に渡す。 こういうフレームワークなら欲しいな。 特に3.をServletの実装から完全に切り離したい。
36 :12/01/30 ViewとActionの話が混ざってる
37 :12/01/30 .vmファイルだけみて比較してるから気付いてないんだろうけど、 Velocityにも対応するjavaコード書いたら>>17 とVelocityの違いって 条件分岐(if, for)を書くところをテンプレートにするか javaソースにするのかぐらいしかないと思うよ(あとid属性) データベースから商品リストを吐くサンプルで比較したらいんじゃない? Velocityを内部に組み込んだフレームワークってあるかしらんが
38 :12/01/30 もしべろ(もしVelocityを内臓したら)との比較やってみました まずはVelocityを使わない場合 <div id="item_list"> __<div id="item"> ____商品名:<span id="item_name"/><br/> ____価格:<span id="item_price"/><br/> __</div> </div> @Source(html="/source/hoge.html") class Hoge extends Module { __@Source __Canvas item_list; __ __@Source __Group item; __ __void onModel(Event e){ ____BusinessLogic logic = new BusinessLogic(); ____List<Item> entityList = logic.getItemListFromRDB(); ____ ____for(Item i : entityList){ ______Node node = item.in(item_list); ______node.id("item_name").addText(i.name); ______node.id("item_price").addText(i.price); ____} __} }
39 :12/01/30 続いてVelocityを内部で利用した場合です。 <div> __#foreach( $item in $item_list) ____<div> ______商品名:$item.name<br/> ______価格:$item.price<br/> ____</div> __#end </div> class Item { __public String name; __public int price; } @Source(vm="/source/hoge.vm") class Hoge extends Module { __@Write.Velocity // アウトジェクション __List<Item> item_list; __ __void onModel(Event e){ ____BusinessLogic logic = new BusinessLogic(); ____item_list = logic.getItemListFromRDB(); __} }
40 :12/01/30 __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________ __________________________________
41 :12/01/30 >>35 >1.getParameterMapを使ってパラメタを全部取得する。 Servlet APIは元からパラメータをMapに持っています。 Mapからclass fieldにマッピングするならば、 SpringやSeasarはみんなそれですよ。 >2.そのMapに対して徹底したValidationと正規化を行う。 fieldにマッピングされた値に対してアノテーションで行うのが 現在の主流(SpringやSeasar)です。 >4.最期にそのMapをテンプレートエンジン(Velocity)に渡す。 >こういうフレームワークなら欲しいな。 Spring + Velocityはどうですか。
42 :12/01/30 >>38 続き Velocityと比べた感想として、Javaソース内でHTML id に関する 文字列リテラルをメソッド内から消したいって印象が残りました。 (メソッド内でなければデプロイ時にID不一致が全て検出できると思うので) EntityBeanと相性が悪そうですが、改善案を出してみます。 @Source(html="/source/hoge.html") class Hoge extends Module { __@Source __Canvas canvas; __void onModel(Event e){ ____BusinessLogic logic = new BusinessLogic(); ____List<Item> item_list = logic.getItemListFromRDB(); ____canvas.add(item_list); __} } @Source(html="/source/hoge.html", id="item") class Item extends Group { __public String name; __public int price; }
43 :12/01/30 >>41 >Mapからclass fieldにマッピングするならば、 それをしたくないんだよ。 Bean書くのめんどくさいじゃん。しかもマッピングに失敗したら漏れなく例外吐くじゃん。 マッピング成功後のValidationも別途書かなきゃいけないじゃん。 悪意を以て値が改変されてたらシステム止まるじゃん。 めんどくさいからMapのままでいいよ。 Mapに対して何かするメソッドを沢山作って メソッドチェーンで手っ取り早く終わらせたい。 >Spring + Velocityはどうですか。 XML書くのめんどい。 パラメタも設定ファイルも全部MapとPropertiesに入れちゃえばいいじゃん。 なんでいちいちBeanとXML書く必要あるの? そんなにたくさんオブジェクト作っておいて、やってることはせいぜいが テンプレートエンジンへの値の再設定じゃん。
44 :12/01/30 >>43 ダックタイピングではない言語でMapに詰め込んだり rubyみたいなのは無理ですけど、無名クラスでコールバックぐらいなら。 void test(){ __Form form = Servlet API; //Http Form パラメータ __Map result = new Scope(form){ // 引数にForm, Session, Cookieどれか ____public String name(String value){ // メソッドの名前 = MapのKey ______escape(value); // HTML Escape ______return value; ____} ____public int age(int value){ return value; } __}; __super.view(result); // Velocity }
45 :12/01/30 いやまてよ、Formパラメータに限定すればString型と決まってるからできるね。 PHPみたいだけど。 Map form = Servlet API; escape(form, "テキストエリア"); // TextAreaに入力された値をエスケープ
46 :12/01/31 こういう流れ @Source(vm="/source/hoge.vm") void onModel(Event e){ __Map form = Servlet API; __if (validate(form)) { ____BusinessLogic logic = new BusinessLogic(form); ____form = logic.aLogic().bLogic().cLogic(); //メソッドチェーン __} else { ____form.put("validation.error", "入力エラーです"; __} } boolean validate(Map form) { __LzMap map = new LzMap(form); __if (!map.getSortedKeys().equals("[item.name, item.price]")) return false; __if (!LzValidator.isJapanese(form.get("item.name"))) return false; __if (!LzValidator.isInteger(form.get("item.price"))) return false; __retrun true; }
47 :12/01/31 Validationは面倒だから設定ファイルに外出ししたほうがいいと思う validation.values=item.name,item.price validation.item.name=Japanese validation.item.name.error=不正な商品名です。再入力してください。 validation.item.price=Integer validation.item.price.error=不正な価格です。再入力してください。 みたいにしておいて、自動でチェックする機構を作る この部分はセキュリティ上、最も重要なポイントなので、必要なら XMLでもいいと思うよ。
48 :12/01/31 Applicationに対して1個。 Pageに対してそれぞれ1個の設定ファイルがあるといいと思うよ。 とにかくValidation済みのMapが一個あれば、大抵の処理では事足りるんだよ。 あと、HTMLエスケープはテンプレートエンジン側の仕事じゃないかな。 経験上Servlet内でエスケープするとろくなことないよ。
49 :12/01/31 http://infosupport.infoteria.co.jp/asbook/asbook340_application_web.html から引用。 Velocityでの商品名等と価格の例。 #foreach ($r in $in.records) <tr> <td>$sys.escape($r.field(0))</td> <td>$sys.escape($r.field(1))</td> <td>$sys.escape($r.field(2))</td> <td align="right">$sys.formatDecimal($r.field(3),'###,###')</td> </tr> #end
50 :12/01/31 age
51 :12/02/01 誰がブログで書いてたか忘れたけど、 ビュー制御用に新しいテンプレート言語を覚えるなんて馬鹿らしいじゃん
52 :12/02/01 まず始めにテンプレートエンジンとか設定ファイルありきではなくて、 Javaでプログラミングするスタイルを土台に作ったうえで 様々なテンプレートや設定ファイルからスケルトンコードを 出力するツールを作ったらいんじゃないだろか (.java生成でもいいし、鯖へデプロイ時にjavassistで動的生成でもいい) フレームワークの上にさらにフレームワークやライブラリを乗せることを 前提にしたつくりって風呂敷が大きすぎるかもしれんがな
53 :12/02/01 >>51 もしVelocityのことを言語と言っているなら、簡単すぎてあくびがでるレベルだけどね。 それにビューをJavaから分離することでXSS脆弱性を根治できるんだとしたら 十分おつりがくる。 XSS脆弱性は風邪じゃなくてインフルエンザ。 発生したらシステム止めないといけないランクS障害だからね。 >>52 WEBの基本は、処理の「前の」Validationと、処理の「最後の」HTMLエスケープ。 これはいつの時代も変わらない真理なんだが、いつもないがしろにされて 不具合とスパゲティコードを生み出している。 Java単体、いやServlet単体で何ができるか?アノテーションでどこまで自動化できるか? 深刻な不具合(XSS脆弱性、唐突な実行時例外、etc)が起きない仕組みづくりは可能か? このへんを突き詰めていくのは興味深い問題だと思う。
54 :12/02/01 >WEBの基本は、「前の」Validationと、処理の「最後の」HTMLエスケープ。 >どこまで自動化できるか? >Validation 例えばログイン処理でカスタムアノテーションを使って フィールドにマッピング+バリデーションの場合、 半角英数であるか、ぐらいはアノテーションでする。 カスタムアノテーションにはEvent eが渡され、バリデーション処理中に 次のようにマップにエラー情報が渡された場合、onError(Event e)に推移する。 (※HashMapであるErrorsのサイズ > 0 のとき、エラーが発生しているとみなすので スタックトレースが重い例外を発生させない ) Errors error = e.getError(); error.setError("error name", "error value"); class Hoge extends Model { __@Read.Form // onRead(Event e)でリクエストパラメータから値を読み出す __@Locale.English // バリデーション __@Length(min=4, max=8) // バリデーション __String name; __protected onRead(Event e){} __protected onValidate(Event e){} __protected onModel(Event e){} __protected onResult(Event e){} __protected onError(Event e){} // Errorsからエラー情報を取得できる }
55 :12/02/01 カスタムバリデーターは次のように実装されます。 // バリデーションようのアノテーション @Validator(listener = LengthValidator.class) public @interface Length { __int min() default 0; __int max() default 0; } // アノテーションの実装 public class LengthValidator implements Validator.Listener<Length, String>{ __public void onListener(Length type, Event e, String value){ ____int length = value.length(); ____int min = type.min(); ____int max = type.max(); ____// (エラーが起きたら例外ではなくErrors ers = e.getError()に文字列をつめる) __} }
56 :12/02/01 >処理の「最後の」HTMLエスケープ。 ページ内の動的領域が分かるならば、 動的領域の全てをHTMLエスケープすればいいかもしれません。 私は文字列計算のパフォーマンスのためにHTML IDと一致する Canvas領域を用意していましたが、これをエスケープ対象領域に使うとか。
57 :12/02/02 >>38 は、素のDOMプログラミングよりは簡単だけど、VelocityやPHPと比べたら直感的でないし、めんどくさい。
58 :12/02/02 >>57 Pure HTML vs テンプレートエンジンのトレードオフだな。 作業を分離した場合(大規模)か、しない場合(小規模)かで評価違う。 >>ちなみに38, 42 にあるソース側の構文は改善できる。できないのはHTML内のID。
59 :12/02/02 意外と有用なスレになっているな。
60 :12/02/02 すまんあげてしまったorz
61 :12/02/02 rubyとscala調査したけどViewに関して収穫なし。
62 :12/02/02 >>61 viewというかtemplare engineはTAL (Template Attribute Language)がすき。 zopeちゃん、息してないけど。
63 :12/02/02 SeasarやSpringでVelocityやFreeMakerが使われてる(使える)ので、 POHP(Pure HTML)で工夫する余地を探す事にします。 <SAMP>, <VALUE>などHTML5にあるタグ+規約で ページ側の冗長を削る事を先に行い、 それにあわせてJava側を改革できれば良いかなと。 独自タグ(XMLNS、タグライブラリ)は HTMLオーサリングツールと相性が悪いのでなし。
64 :12/02/02 >>62 タグライブラリ形式ですね。 <lib:Facebook/>みたいにマッシュアップとかコンポーネント化で 一番魅力的なんですが、メインには採用できません。
65 :12/02/02 一部のCMSではHTMLオーサリングツールとの関係で コメント内にタグライブラリを書かせてるみたいです。
66 :12/02/02 >>64 違うよ。HTMLのタグにTALで定義された属性を記述する。 専用のタグはない。 名前空間も定義されてたはずなので、元がxhtmlならvalidなxmlになる。 属性ベースなので、オーサリングツールの邪魔をしない。 テンプレートそのものがサンプルとなる。
67 :12/02/02 最後のテンプレートそのものがサンプルになるとは、TALの属性は、webブラウザでは無視されるので、そのまま表示することができるということです。
68 :12/02/02 >>66 なるほどねー。属性は害なく使えるんだ。 XMLベースなら簡単に追加できるし、いいかも。
69 :12/02/03 がんばage
70 :12/02/06 属性ベースで考えてみたんですが、HTMLからJava生成に便利な反面 HTMLに独自属性が増えると見た目がいまいちだったり。 (もともとHTMLって属性をたくさん使うので) やはりid属性を使ったPure HTMLだけで作る仕組みに留めて、 XMLやテンプレエンジンからの自動生成ツールを上乗せすることにします。
71 :12/02/06 昔、住友がStrutsソースを吐き出す 楽々なんとかっていうXML系フレームワークを売ってたらしいですね。 フレームワークの上にフレームワークってのも悪くないはず。
72 :12/02/06 <SAMP></SAMP>で囲まれた領域はフレームワークが読み込み時に削除する。 静的な見た目確認テスト用のデータを置く為に利用する。 <VAR></VAR>も何か使えないかなとは思うのですが、 <var>node:item(型:変数名)</var> とか候補を挙げつつも今のところは保留。
73 :12/02/06 Node, Canvas, Groupだけ見直したら実装、 あとの問題は上位のレイヤーにまる投げ
74 :12/02/06 実装に関して課題はファイルアップロード。 とりあえず現バージョンではcommons-fileuploadを使うとして、 (依存ライブラリ増やしたくないのだが) テンポラリファイル置き場とかの設定方法考えないといけない。 ファイルアップロード自体を保留しないと進まなくなる予感。
75 :12/02/07 ninja test
76 :12/02/07 もう一回
77 :12/02/07 まだLV15しかないのか
78 :12/02/08 WicketとかClickだとGET, POSTなんてのを隠蔽している。 綺麗にみえるけど、FormはPOSTであると決めうちしてるのだろうか? サーチエンジンに入力して送信するボタンはGETだけど、 そこはBookmarkablePageへの移動判定と、リダイレクトする仕組みで 層を作ってごまかしているはず。 仮想化するために回線IOが増えるのは避けたい。 String id ="html"; Button html = new Button(id) { __@Override __public void onSubmit() { ____setResponsePage(new HomePage(new DiaryVO())); __} };
79 :12/02/09 飽きてきた。Memcachedの偽物でも平行してつくろうかな
80 :12/02/09 そんなときはノーパンしゃぶしゃぶ行って気分転換するといいよ
81 :12/02/09 外に行くの面倒だから ノーパンでしゃぶしゃぶ食べたよ。
82 :12/02/09 しゃぶしゃぶ金かかるから 娘の食べてノーパンにしたよ。
83 :12/02/10 >>70 >属性ベースで考えてみたんですが、HTMLからJava生成に便利な反面 >HTMLに独自属性が増えると見た目がいまいちだったり。 >(もともとHTMLって属性をたくさん使うので) HTML5ならdata属性が使えるし、見た目もそんなに悪くないと思う。 id属性はCSSやJavaScriptでも使うから、テンプレートエンジンで使う属性は それらと分けたいという要求は少なくない。 それを考慮すると、独自属性は悪い選択肢ではない。 >やはりid属性を使ったPure HTMLだけで作る仕組みに留めて、 >XMLやテンプレエンジンからの自動生成ツールを上乗せすることにします。 すでにMayaaというのがあるけど、それとは違うものを作るってことだよね。 差別化要因は何になる?
84 :12/02/10 久々のライブラリスレに期待が高まる。 というわけで俺が作っているライブラリを晒す。 【車輪の】JunkUtil 1.0.18 安定版 公開【再発明】 http://sourceforge.jp/projects/junkutil/releases/
85 :12/02/10 >>84 何考えてるのかさっぱりわからん
86 :12/02/11 >>83 Mayaaは全く競合ではないよ。 >HTML5ならdata属性つかえば完全Pure HTMLで機能盛り込める。 これ知らなかった。でも独自属性の方が名前がすっきりしそう。 >id属性はCSSやJavaScriptでも使うから、テンプレートエンジンで使う属性は >それらと分けたいという要求は少なくない。 もう一度考えてみる
87 :12/02/11 >>86 html5のdata属性は、data-で始まってれは、どんな名前をつけてもいいってのだから、ほぼ独自属性だな。 jQuery Mobileがdata属性を駆使してたかとおもう。
88 :12/02/11 >>84 勝手に俺のレスをコピペするな。
89 :12/02/11 うるさいハゲ
90 :12/02/11 で? ノーパンしゃぶしゃぶは完成したのか?
91 :12/02/11 そうかもしれないし、そうじゃないかもしれない
92 :12/02/11 OK それじゃ歩み寄ろう
93 :12/02/12 >>86 >Mayaaは全く競合ではないよ。 どう違うのか説明してくれないと誰にも伝わらないし、スレも寂れる。
94 :12/02/12 それは説明しなくても分かること 説明しないとわからない奴は馬鹿。 俺は転載
95 :12/02/12 >>93 MayaaはVelocityと同じ。 私の場合はコアにDOM形式のAPIがあって、Ajaxなどでそれを生かすの目的。 ファイルのHTMLを使い、またHTMLファイル内で小細工するのは DOMの欠点を補うために、DOMライクなAPIの上に乗せられたレイヤーにすぎない。
96 :12/02/12 メモ: セッションの上にリダイレクトスコープ(フラッシュスコープ)とか 会話スコープみたいな機能を盛り込んだり、 ブラウザの戻るボタン対策に、セッションに古いページ情報詰め込んだりする コンポーネントを持つフレームワークもあるみたい。 いっそのことセッションの代替を作ってしまうかとも思ったのですが、 ver1.0ではこの辺も全部棚上げということにします。
97 :12/02/13 >>84 みたいなオープンなタイプの奴とライブラリを共有して発展してみたいな。 ただし俺の基本ライブラリは>>84 の1000倍以上なので協力関係は無理そうだ。
98 :12/02/13 SourceForge、GoogleCode、自宅サーバー、 どこで晒すにしてもなかなか難しい事よ
99 :12/02/13 >>95 >MayaaはVelocityと同じ。 どういう観点から同じといっている? MayaaはVelocityとまったく違うと思うんだけど。 >私の場合はコアにDOM形式のAPIがあって、Ajaxなどでそれを生かすの目的。 なんか話がごっちゃになってない? コアにあるというDOM形式のAPIって、サーバーサイドの話でしょ。 Ajaxは関係ないし。
100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
DarkBASIC (441)
BREW(Binary Runtime Environment for Wireless) 11 (512)
【コボル】COBOL不要論【ただのDSLだよね?】 (327)
関数型言語Part5 (851)
【GUI】wxWidgets(旧wxWindows) その5【サイザー】 (425)
Perlについての質問箱 51箱目 (412)
--log9.info------------------
立正大学Z (939)
【春休み】追手門学院大学part62【やることがない】 (189)
青山学院大学新入生スレ (281)
金沢大学新入生スレ part2 (338)
専修大学ネットワーク情報学部新入生スレ (283)
【ぼっちも】松山大学 part23【リア充も】 (1001)
【くたばれ】専修大学法学部 79号館【クレクレ共】 (374)
東北大学A8XB29匹ワンちゃん! (861)
【喪雑】嘉悦大学・3【避難所】 (198)
【広国】広島国際大学 Part7【HIU】 (145)
【もうすぐ】日本大学法学部2年ぼっち5人目【3年生】 (112)
【CBTとOSCE】日本薬科大学part13【突破せよ】 (576)
香川大学総合スレ★13玉目 (104)
【tuis】東京情報大学 ぼっち12年目【ついす】 (392)
東京理科大学工学部 2号棟 (270)
山口東京理科大学と諏訪東京理科大学スレ (251)
--log55.com------------------
高専生だけど人生詰んでる
現高専生・高専卒の奴きてくれないか?
大阪情報専門学校part7
【もうすぐ新学期】長岡高専part28【祝・誤入学】
☆専門学校の広報活動なんてペテン師と同じ!
専門学校の広報・入学相談室担当者の仕事はどうよ?
大阪スクールオブミュージック専門学校
【NVA】名古屋ビジュアルアーツ【総合】