<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小雨開源

    我也加入到了開源隊(duì)伍中了

    常用鏈接

    統(tǒng)計(jì)

    最新評(píng)論

    創(chuàng)造中國(guó)神話的MVC框架如何改變Web

      他們說:“Web改變世界,我們改變Web”,你知道是誰(shuí)改變了誰(shuí)嗎?

      他們說:“From the earth to the moon, and ready for Mars!”,你ready for what呢?

      他們勇敢,他們開放,他們懂得分享,所以他們選擇開源,并且可以自豪地宣布,他們活在“勇敢者的新世界”里。而同樣作為程序員的你,你的世界又是什么樣的呢?

      這里的“他們”,我想我不提大家已經(jīng)知道是誰(shuí),就是來自中國(guó)的開源項(xiàng)目operamasks。他們雖然沒有創(chuàng)造世界神話(不知道第四個(gè)通過JavaEE5認(rèn)證的服務(wù)器算不算),但他們確實(shí)創(chuàng)造了中國(guó)神話,如果你不服,那么你能舉出一個(gè)在他們領(lǐng)域里面比他們成功的同類產(chǎn)品嗎? 

      成功者都常說,“細(xì)節(jié)決定成敗”,只有為用戶考慮到各種細(xì)節(jié),用戶才會(huì)支持你。Operamasks的成功,我覺得除了他們的“勇敢”以外,還有一個(gè)重要因素是“細(xì)節(jié)”,他們考慮到了很多細(xì)節(jié),很多都是在JSF這樣一個(gè)“標(biāo)準(zhǔn)”層面的東西無法強(qiáng)制規(guī)定死,但往往對(duì)用戶來說又是非常實(shí)用的細(xì)節(jié),還有解決了很多常遇到的繁瑣細(xì)節(jié)。

      道理及感嘆在這里就不想多發(fā)了,我想大家都關(guān)注的是具體的技術(shù),所以本文就簡(jiǎn)單例舉一下operamasks中的一些比較具有人性及親和力的細(xì)節(jié),看了后我想使用JSF開發(fā)的你一定很覺得非常體貼。
     

      1、 Kill掉JSF中令人討厭的配置

      一個(gè)簡(jiǎn)單類似的注冊(cè)示例,成功就導(dǎo)航到/accepted.jsp去,而拒絕就導(dǎo)航到/accepted.jsp。

    ManagedBean中

     
    public String signup() {

        
    if (Math.random() < 0.2) {

          
    return "accepted";

        } 
    else {

          
    return "rejected";

        }

      }


      讓標(biāo)準(zhǔn)JSF來干吧,只是為了一個(gè)簡(jiǎn)單的跳轉(zhuǎn),你就需要配置下面這樣一堆html,你估算一個(gè)項(xiàng)目下來的配置文件代碼是多少。

    <faces-config>

      
    <navigation-rule>

        
    <from-view-id>/signup.jsp</from-view-id>

        
    <navigation-case>

          
    <from-outcome>accepted</from-outcome>

          
    <to-view-id>/WEB-INF/results/accepted.jsp</to-view-id>

        
    </navigation-case>

        
    <navigation-case>

          
    <from-outcome>rejected</from-outcome>

          
    <to-view-id>/WEB-INF/results/rejected.jsp</to-view-id>

        
    </navigation-case>

      
    </navigation-rule>

    </faces-config>


      而用operamasks,你的代碼只需要寫成下面這樣即可:

     
    public String signup() {

        
    if (Math.random() < 0.2) {

          
    return "/WEB-INF/results/rejected.jsp ";

        } 
    else {

          
    return "/WEB-INF/results/accepted.jsp ";

        }

      }


      也就是說operamasks幫你吞掉了這些無味又沒有太多營(yíng)養(yǎng)的配置文件,并幫你消化,你說他是不是很人性。 

      另外,比如我們想要用到一個(gè)ManagedBean,標(biāo)準(zhǔn)JSF需要在配置文件中寫一堆的配置文件,如下:

    <faces-config>

      
    <managed-bean>

        
    <managed-bean-name>myBean</managed-bean-name>

        
    <managed-bean-class>

          package.MyBean

        
    </managed-bean-class>

        
    <managed-bean-scope>request</managed-bean-scope>

      
    </managed-bean>

    </faces-config>



      而operamasks設(shè)計(jì)了一套注解annotation標(biāo)簽,你只需要在類的聲明前加上一個(gè)@ManagedBean標(biāo)簽即可,如下:

    @ManagedBean(name="myBean", scope=ManagedBeanScope.REQUEST)

    public class MyBean {

    }


      類似這樣的細(xì)節(jié)還有很多,讓我們慢慢去發(fā)掘吧。

     

    2、用Ajax是那樣方便

      不管你信不信,事實(shí)擺在那里他真的很方便,Ajax的無刷新的效果對(duì)于Web應(yīng)用來說確實(shí)很酷也很鉉。對(duì)于傳統(tǒng)的JSF實(shí)現(xiàn),要想用Ajax你就要借助其它的一些Ajax框架,名字大一點(diǎn)算是ajax4jsf吧。下面看一個(gè)動(dòng)態(tài)刷新頁(yè)面中id為msg處的內(nèi)容的示例:

      首先要定義一個(gè)JSF標(biāo)簽

          
    <h:outputText id="msg" value="#{bean.text}" />
      

      然后定義一個(gè)ajax2jsf的按鈕標(biāo)簽:

    <a4j:commandButton reRender="msg" value="Submit"/>


      而operamasks中的按鈕標(biāo)簽仍然是:

    <h:commandButton value="Server Submit" />


      不懂JSF的同仁一定都覺得怪,得懂行的就知道。這個(gè)<h:commandButton value="Server Submit" />可是在JSF的JCP中規(guī)定的標(biāo)簽標(biāo)準(zhǔn)啊,這個(gè)是任何支持JSF的開發(fā)工具都能認(rèn)識(shí)的,當(dāng)然程序員就不用說了。而那個(gè)什么<a4j:commandButton>是什么,那個(gè)reRender屬性,更是怪怪的,鬼二哥Studio才會(huì)認(rèn)他。


    3、Rich Components的集成

      看過Operamasks有名的jsfdemo示例吧,我們來看看反應(yīng)。一些菜鳥感嘆說:“發(fā)漂亮啊,太偉大了!”;一些小牛們會(huì)眼紅紅地生悶氣,怎么我才想到的你就做出來了;一些大牛們會(huì)說:“這不是偷人家ext的嗎?”,幽默一點(diǎn)會(huì)說:“我認(rèn)為是是進(jìn)到了extjs.com”;還有一些很有尊嚴(yán)并非常愛國(guó)的人會(huì)說:“真丟無恥,真丟中國(guó)人的臉,把別人的東西改改就說成自己的了,真賤……*&^&^%%^&8…”。

      上面的種種反應(yīng)應(yīng)該歸納為中國(guó)開源的特色悲喜劇。這里我想說的是,如果你真正花一點(diǎn)時(shí)間去了解一下Operamasks、了解一下Ext、了解一下Rich Components,那么所有你就不會(huì)成為上面悲喜劇中主角。

      我們知道Java跟Web式的Rich Components也無法,跟Ajax也無關(guān)。Ext專用于Web式的Rich Components,但對(duì)于企業(yè)級(jí)的應(yīng)用來說,他是解決了很小的一部分問題,而且單獨(dú)使用Ext要寫很多很多的跟很酷的Ajax效果一樣很酷又很讓人頭暈的Javascript。那么該如何解決這問題呢?很明顯,只有大家合作。Operamasks也就通過集成同樣是開源的Ext項(xiàng)目來實(shí)現(xiàn)了豐富的Rich Components,你可以像開發(fā)Delphi或VB那樣,直接往界面上拖出一棵非常實(shí)用的樹出來。Rich Components的集成中有很多細(xì)節(jié)及技巧,本文就不例出。
     

      其實(shí)細(xì)節(jié)還存在很多地方,比如多國(guó)語(yǔ)言中的小標(biāo)簽,注入Spring中的Bean,由于研究Operamask的時(shí)間比較短,而且資料也比較少(哪位朋友如果有好的資料或示例方便的話請(qǐng)發(fā)一些給我學(xué)習(xí)),所以暫時(shí)就寫這些,以后會(huì)逐漸以大家分享。 

    后記:

      雖然才開始投身開源的世界,但發(fā)現(xiàn)這個(gè)純技術(shù)的世界并不是想象中的那么單純。我上一篇寫過《中國(guó)java開源界最可愛的人們》一文,從一些同仁們的回復(fù)看出大家對(duì)中國(guó)的開源(包括項(xiàng)目、環(huán)境、產(chǎn)品、人品)仍然很悲觀,甚至還存在一些心理陰暗的人,篇造出什么“軟件界的洪志 lee”之類的大詞,也許就恐天下不亂吧。

    posted on 2007-12-14 09:20 小雨開源 閱讀(2250) 評(píng)論(19)  編輯  收藏

    評(píng)論

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web[未登錄] 2007-12-14 09:29 無名

    也就是說operamasks幫你吞掉了這些無味又沒有太多營(yíng)養(yǎng)的配置文件,并幫你消化,你說他是不是很人性。

    =====================================================

    建議你好好學(xué)習(xí)一下為什么會(huì)有配置文件的出現(xiàn)

    如果view的路徑變了,是 recompile 方便呢還是改變一下配置文件方便呢  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 09:33 小雨開源

    @無名

    兄臺(tái)注意看我的這一句:“吞掉了這些無味又沒有太多營(yíng)養(yǎng)的配置文件”,“沒有太多營(yíng)養(yǎng)”并不是“完全沒有營(yíng)養(yǎng)”。所以如果在你說的那種情況配置文件是有營(yíng)養(yǎng)價(jià)值的。但是80%的情況下,我們總不會(huì)沒事總?cè)サ粢粋€(gè)已經(jīng)事先定好的配置文件的文件名或路徑吧。注意這里說的是80%,不是100%。  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 10:46 隔葉黃鶯

    return "/WEB-INF/results/accepted.jsp ";

    寫在代碼里其實(shí)對(duì)頁(yè)面流的理解極不利的

    這要去批評(píng) struts/webwork/spring mvc 的做法都是有問題的,或者說不符合中國(guó)人的習(xí)慣?  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 10:59 guest

    @小雨開源
    想省事干脆去用Rails,何必用那個(gè)四不像的operamasks  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 11:30 小雨開源

    @guest
    Rails也就是考慮了這些細(xì)節(jié),所以才不錯(cuò)。但不論如何,他跟JavaEE不是一個(gè)級(jí)別的!  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 11:48 guest

    @小雨開源
    呵呵,對(duì)啊,Operamasks這樣肆意亂改(或者叫踐踏)JSF到時(shí)也會(huì)跟JavaEE不在一個(gè)級(jí)別的。  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web[未登錄] 2007-12-14 15:11 小雨開源

    @guest
    知道EJB3與EJB2的區(qū)別嗎?:-)  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 15:19 guest2

    @小雨開源

    你知道spring2與spring1的區(qū)別嗎?
    你知道java與php的區(qū)別嗎?
      回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 15:21 guest3

    @小雨開源
    你知道annotation與XML的區(qū)別嗎?
      回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 16:14 小雨開源

    @guest,guest2,guest3

      拜托,不要跑題,OK。請(qǐng)你首先要有一點(diǎn)常識(shí),你也就不會(huì)鬧“樣肆意亂改(或者叫踐踏)”的笑話,首先operamasks是一個(gè)JSF的實(shí)現(xiàn),JSF規(guī)范里面制訂了的,他都實(shí)現(xiàn)了,他再牛還不能牛到隨便改標(biāo)準(zhǔn)的地步,又何來踐踏呢?如果只是因?yàn)槎嗔艘恍?shí)用功能支持,就叫踐踏的話,那么JPA又怎么可能出來呢?眾多的JPA實(shí)現(xiàn)中,也增加了很多自己的一些特色功能,你能說別人在踐踏JPA嗎。
      好不好用,要以事實(shí)為基礎(chǔ),我想樓上的應(yīng)該沒有用過JSF吧,知道JSF怎么用嗎?知道JSF與Struts2的區(qū)別嗎?如果你沒有用過,又怎么知道這些細(xì)節(jié)上的改進(jìn),不是用戶所需要的呢?  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 16:53 mic

    性能是核心 解決問題是關(guān)鍵 包裝來包裝去的干啥呀 拷的煩事(code fans)們當(dāng)下流行祼睡 哈哈哈  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 17:18 gr8vyguy

    又見標(biāo)題黨  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 17:56 我來也

    賣拐的,忽悠繼續(xù)忽悠~~  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 21:14 kk

    Web應(yīng)用真的需要MVC嗎?不要以為這是一個(gè)蠢問題,社區(qū)里已經(jīng)有很多針對(duì)這個(gè)問題的討論,甚至有人說MVC已死(http://blog.jeffhaynie.us/mvc_is_dead.html),這里說的MVC指的是那種以服務(wù)器為中心得web架構(gòu),比較常見的是struts之類的框架,從根本上講jsf也是基于MVC的框架(雖然說不只是MVC)。在Ajax出現(xiàn)之前,瀏覽器的功能基本上只是顯示頁(yè)面,從業(yè)務(wù)邏輯到UI渲染都是服務(wù)器的責(zé)任,mvc在這時(shí)候是理所當(dāng)然最好的解決方案。
    但是web的世界已經(jīng)開始步入2.0的時(shí)代,基于Ajax,Widget,REST等等技術(shù)的web開發(fā)模式也逐漸被越來越多人采用,比起傳統(tǒng)的MVC模式來說,它們之間的區(qū)別在于,瀏覽器的能力得到了開發(fā),相當(dāng)一部分服務(wù)器的轉(zhuǎn)移到了瀏覽器端,隨之而來的是view的前移,controller的前移,服務(wù)器逐漸退化為無狀態(tài)的服務(wù)和數(shù)據(jù)提供者,在這種情形下我們還需要復(fù)雜的struts, jsf之類的mvc框架來開發(fā)web應(yīng)用嗎?
    我對(duì)openmask不是很了解,但是基于jsf的框架是否符合web開發(fā)發(fā)展趨勢(shì)是非常值得我們思考。是改變了web,還是被web淘汰?  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-14 23:22 hejianhuacn

    無論是JSF還是Asp.Net它們都是 頁(yè)面型MVC的代表:豐富的組件庫(kù),會(huì)為我們的節(jié)省不少的開發(fā)時(shí)間,而且也能在一定程度上對(duì)代碼風(fēng)格作出統(tǒng)一。都是為了簡(jiǎn)化開發(fā),增加開發(fā)速度,當(dāng)我們連HelloWorld都寫不 出來,或者說寫不好的時(shí)候,去考慮整個(gè)框架的擴(kuò)展性我不知道有沒有必要。當(dāng)然,對(duì)大牛級(jí)的人我覺得設(shè)計(jì)東西的時(shí)候自然會(huì)考慮擴(kuò)展性的,其實(shí)他們就是不考慮在舉手投足之間還是會(huì)流露出來,因?yàn)榻?jīng)驗(yàn)就是為了讓自己活得更好、更舒坦,所以沒人會(huì)愿意自己的日程安排被打亂,大牛們就更不愿意了。但人總有成長(zhǎng)階段,一開始如果能夠?qū)懽銐蚨嗟腏SP或Servlet代碼絕對(duì)不是壞事,經(jīng)驗(yàn)都是建立在痛苦之上的,為什么有這么多框架出來?就是因?yàn)榇蠹冶徽垓v得不行了,然后就有受不了的大牛們站出來!所以某個(gè)時(shí)候某樣?xùn)|東的出現(xiàn)都是有他的道理的,JSF那么牛他還不是建立在Servlet的基礎(chǔ)上的嘛。樓上兄弟的Web2.0 觀點(diǎn)真的有點(diǎn)讓人心驚,讓我想起公司的那些出去忽悠的高層們,我覺得Web2.0 應(yīng)該是一種整體架構(gòu),一種新的用戶體驗(yàn),而不是說展現(xiàn)和交互方式由什么來實(shí)現(xiàn),這不是重點(diǎn)。就像重構(gòu)所推崇的一些原則,兄弟如果你覺得自己心里對(duì)業(yè)務(wù)模型足夠的有數(shù)的話,開始寫代碼吧,然后在適當(dāng)?shù)臅r(shí)候進(jìn)行代碼的重構(gòu)可能會(huì)更好。我們要記住所謂JSP、JSF、ASP.Net、PHP它們都只是“翻譯引擎”,把代碼翻譯成HTML或是瀏覽器能夠理解的一些語(yǔ)法規(guī)則而已包括JavaScript在內(nèi)的腳本語(yǔ)言都是這些規(guī)則的一部分,所有的封裝都是為了更快的實(shí)現(xiàn)需求,讓開發(fā)費(fèi)用更低,至于有沒有考慮會(huì)不會(huì)讓程序員抓狂,就不得而知,所以看開一些吧^_^  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2007-12-26 19:40 回復(fù)

    金蝶的東西要慎用啊,吃人不吐骨頭的主  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2008-02-20 14:13 范連洲

    @無名
    同意你的看法(寫程序時(shí)間不少了,不過返回這些東西,感覺很奇怪),那東西寫在程序里讓人看得頭暈眼花,如果結(jié)構(gòu)復(fù)雜,可能會(huì)出現(xiàn)
    return "/WEB-INF/results/accepted.jsp ";
    一大片。并且編譯好后無處查看網(wǎng)站流轉(zhuǎn)過程。  回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web 2008-02-24 02:53 張旭

    現(xiàn)在才看到這篇文章,充分的說明了我不夠關(guān)注外面的世界,每個(gè)人發(fā)表的見解會(huì)因?yàn)閷?duì)技術(shù)的理解、經(jīng)歷、知識(shí)體系各方面相關(guān),但是每個(gè)人都有權(quán)利發(fā)表自己的看法,所以我盡可能客觀的發(fā)表我個(gè)人的感受和看法。
    @無名
    關(guān)于“配置文件還是annotation”的問題,這是一個(gè)系統(tǒng)設(shè)計(jì)的模式的問題,二者之間需要有一個(gè)平衡,將不易變或用戶不可控元信息存儲(chǔ)在annotation中,將易變的和用戶可參與的元信息存儲(chǔ)在配置文件中。
    基于JDK1.5的大多數(shù)平臺(tái)級(jí)的框架都提供對(duì)二者的并行支持,使用配置文件還是annotation完全是由使用者設(shè)計(jì)決定,平臺(tái)并不關(guān)心,只提供支持,這可以處理大部分實(shí)際應(yīng)用場(chǎng)景。
    @guest,guest2,guest3
    你們所發(fā)表的見解,客觀說,我覺得我無法評(píng)論。
    @kk
    我個(gè)人覺得無需討論概念及趨勢(shì),我選擇在實(shí)踐中感受和體會(huì)。
    @回復(fù)
    我個(gè)人覺得不論發(fā)表什么內(nèi)容,都希望能夠有依據(jù)。
    @小雨開源
    感覺很欣慰,畢竟有人在用它,但是我覺得做技術(shù)要踏實(shí)一些,建議你也如此。
      回復(fù)  更多評(píng)論   

    # re: 創(chuàng)造中國(guó)神話的MVC框架如何改變Web[未登錄] 2008-05-08 15:20 過客

    我覺得return "/WEB-INF/results/accepted.jsp ";這種不太好。
    因?yàn)槿绻褪且粌蓚€(gè)返回,比較簡(jiǎn)單。直接寫在代碼里面好了。
    但是往往從管理人員視角來說,需要看到整體頁(yè)面跳轉(zhuǎn)情況。

    其實(shí)獨(dú)立寫XML配置我覺得不必直接return url好,但是有一個(gè)有點(diǎn)-->
    方便寫一個(gè)可視化編輯頁(yè)面跳轉(zhuǎn)的工具。比如eclipse 3.3 netbeans6.0里面都帶了的哪個(gè)face_config編輯工具。我覺得就很方便。

    主要是問題觀察視角的問題,"視角"在現(xiàn)在流行語(yǔ)中,也就是所謂的"Aspect"吧。
      回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产一精品一aⅴ一免费| 亚洲精品无码av人在线观看| 一级女性全黄久久生活片免费| 亚洲人成色777777在线观看| 久久久久久国产精品免费无码| 亚洲熟妇AV日韩熟妇在线| 在线观看亚洲av每日更新| 亚洲天堂免费在线| yellow视频免费在线观看| 亚洲性一级理论片在线观看| 亚洲国产一区视频| 青青在线久青草免费观看| 久久久精品视频免费观看| 亚洲香蕉久久一区二区三区四区| 亚洲人成影院在线无码观看| 国产91色综合久久免费| 日本精品久久久久久久久免费| 亚洲欧洲日本精品| 最新精品亚洲成a人在线观看| 免费无码成人AV片在线在线播放| 男人都懂www深夜免费网站| 日韩成人精品日本亚洲| 亚洲人成电影在线观看网| 国产精品亚洲综合专区片高清久久久 | 久久久久亚洲爆乳少妇无| 国产精品久久久久免费a∨| 成人网站免费看黄A站视频| 亚洲GV天堂无码男同在线观看| 亚洲综合在线观看视频| 国产午夜亚洲精品理论片不卡| 精品国产免费一区二区| 国产成人精品免费视频大| 99精品全国免费观看视频..| 国产区图片区小说区亚洲区| 久久久久精品国产亚洲AV无码| 亚洲AV无码1区2区久久| 亚洲色爱图小说专区| 亚洲真人日本在线| 在线a亚洲v天堂网2018| 成人国产mv免费视频| 成人毛片免费观看|