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

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

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

    云自無(wú)心水自閑

    天平山上白云泉,云自無(wú)心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    在tapestry5中,在頁(yè)面之間傳遞基本有3種方法
    1、存放在Session中
    2、使用@Persist進(jìn)行持久化
    3、使用頁(yè)面context來(lái)傳遞參數(shù)。
    其中1和2都需要將數(shù)據(jù)存放在Session中,相對(duì)來(lái)說(shuō)系統(tǒng)的開(kāi)銷(xiāo)比較大。尤其是多用戶(hù)高并發(fā)情況下,對(duì)于性能可能會(huì)有一定的影響。
    使用頁(yè)面Context來(lái)傳遞則需要在開(kāi)發(fā)時(shí)寫(xiě)一些代碼,增加了一些開(kāi)發(fā)量,顯得沒(méi)有前兩種方法方便。
    第3種方法的實(shí)現(xiàn)是需要在頁(yè)面中添加onActivate和onPassivate方法來(lái)完成頁(yè)面參數(shù)的傳遞。
    我們先來(lái)看一下其背后的故事。
    舉個(gè)例子,比如說(shuō)我們有兩個(gè)頁(yè)面,第一個(gè)是查詢(xún)條件輸入頁(yè)面input,另一個(gè)是查詢(xún)結(jié)果輸出頁(yè)面output。input頁(yè)面中有兩個(gè)查詢(xún)條件,起始時(shí)間dateFrom和終止時(shí)間dateTo
    在Input.java中,我們可以很直觀(guān)地這樣寫(xiě):
    @InjectPage
    private Output output;

    @Property
    private String dateFrom;

    @Property
    private String dateTo;

    Object onFormSubmit() {
            output.setDateFrom(dateFrom);
            output.setDateTo(dateTo);
            return output;
    }
    首先使用注解注入output頁(yè)面,然后在表單的提交事件中,返回output,這樣就在程序中定義了返回頁(yè)面,而不是使用配置文件的方式。
    但是這樣的實(shí)現(xiàn)卻不能正確運(yùn)行,原因是因?yàn)門(mén)apestry5的使用了頁(yè)面池技術(shù),頁(yè)面在每次渲染前都是從頁(yè)面池中隨機(jī)獲取一個(gè)頁(yè)面,而從頁(yè)面池中取得的頁(yè)面,所有的屬性都是被清空了的。
    也就是說(shuō)在上例中,雖然我們注入了output頁(yè)面,但是此頁(yè)面馬上就被放入了頁(yè)面池,而且其中的屬性值馬上就被清空了。這就是引入onActivate和onPassivate這丙個(gè)方法的原因。tapestry5在清空屬性前會(huì)首先查看是否包含onPassivate方法,如果有,就把其返回值保存起來(lái),然后從頁(yè)面池中取得頁(yè)面后,再把剛才保存的值作為參數(shù)傳遞給onActivate方法。
    這就是方法3的基本原理,但是無(wú)論是在官方的文檔或是示例或者網(wǎng)上其他的應(yīng)用中,可以發(fā)現(xiàn)大部分都是使用單個(gè)參數(shù)的,比如說(shuō)id。這也很容易理解,因?yàn)閛nPassivate的方法的返回值只能有一個(gè)。
    在Tapestry5的官方文檔中,只有一句非常簡(jiǎn)要的話(huà)介紹了如果傳遞多個(gè)文檔的方法: The activation context may consist of a series of values, in which case the return value of the method should be an array or a List. (參見(jiàn):http://tapestry.apache.org/tapestry5.1/guide/pagenav.html)。
    但是這并不是說(shuō)只要在onPassivate中把參數(shù)的值加入到List中,返回一個(gè)List,而在onActivate中接受一個(gè)List參數(shù),然后就可以得到其中的參數(shù)了,因?yàn)門(mén)apestry5把參數(shù)傳給onActivate的方法其實(shí)是通過(guò)將參數(shù)作為HttpRequest中的參數(shù)的。如果試圖使用上述方法就是得到一個(gè)“無(wú)法將List轉(zhuǎn)換成String的錯(cuò)誤”
    所以方法應(yīng)該是這樣的,在Output中:

    private List<String> paramList;
    public void setParamList(List<String> paramList) {
            this.paramList = paramList;
    }
    public List<String> getParamList() {
            return paramList;
    }
    List<String> onPassivate() {
            return paramList;
    }
    void onActivate(String dateFrom, String dateTo) {
            this.dateFrom = dateFrom;
            this.dateTo = dateTo;
    }
    private String dateFrom;
    private String dateTo;

    在Input頁(yè)面中,需要把onFormSubmit改一下:
    Object onFormSubmit() {
            List<String> list = new ArrayList<String>();
            output.setParamList(list);
            return output;
    }

    其中,需要注意的是output中的onActivate方法,基參數(shù)的順序必須和List中放入的參數(shù)順序一致。


     




    評(píng)論

    # re: Tapestry 最新版5.1.0.5教程(十):頁(yè)面間傳遞多個(gè)參數(shù)  回復(fù)  更多評(píng)論   

    2010-02-09 22:12 by 一農(nóng)
    不太看好Tapestry,雖然其他的解決方案說(shuō)不上完美,
    --使用struts2和springmvc的飄過(guò)

    # re: Tapestry 最新版5.1.0.5教程(十):頁(yè)面間傳遞多個(gè)參數(shù)  回復(fù)  更多評(píng)論   

    2010-02-10 09:01 by usherlight
    能說(shuō)一下具體的原因嗎?

    # re: Tapestry 最新版5.1.0.5教程(十):頁(yè)面間傳遞多個(gè)參數(shù)  回復(fù)  更多評(píng)論   

    2010-02-21 15:03 by DH
    T5非常有意思,非常值得學(xué)習(xí)

    # re: Tapestry 最新版5.1.0.5教程(十):頁(yè)面間傳遞多個(gè)參數(shù)  回復(fù)  更多評(píng)論   

    2010-02-22 06:34 by usherlight
    T5其實(shí)是一個(gè)非常好的框架,有很多很強(qiáng)大的功能,但是由于宣傳、學(xué)習(xí)曲線(xiàn)、文檔之類(lèi)的原因,使得它沒(méi)有能夠象struts/strust2這樣流行。
    主站蜘蛛池模板: 中文字幕人成无码免费视频| 亚洲av乱码中文一区二区三区| GOGOGO免费观看国语| 亚洲精品人成无码中文毛片| 黄色a级片免费看| 免费中文字幕在线| 特级无码毛片免费视频| 亚洲中文字幕视频国产| 黄桃AV无码免费一区二区三区| 亚洲综合国产一区二区三区 | 亚洲欧洲日韩国产一区二区三区| 最近中文字幕电影大全免费版| 亚洲成aⅴ人片在线影院八| 免费无码AV片在线观看软件| 亚洲欧美精品午睡沙发| 四虎影视精品永久免费网站| 欧亚一级毛片免费看| 亚洲AV午夜福利精品一区二区| 中文字幕在线免费观看| 国产亚洲玖玖玖在线观看| 日本特黄a级高清免费大片| 最好2018中文免费视频| 久久激情亚洲精品无码?V| 久久久久久免费一区二区三区| 亚洲美女视频网址| 卡一卡二卡三在线入口免费| 人妖系列免费网站观看| 久久精品国产亚洲AV网站 | 特黄特色大片免费| 国产亚洲精AA在线观看SEE| 久草视频在线免费| 看成年女人免费午夜视频| 亚洲成a人片在线观看无码 | 91久久青青草原线免费| 亚洲精品中文字幕| 亚洲中文字幕无码久久综合网| 亚洲性线免费观看视频成熟| 免费一级做a爰片久久毛片潮| 好看的电影网站亚洲一区| 日本精品人妻无码免费大全| 久久国产乱子伦精品免费午夜 |