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

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

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

    nighty

    折騰的年華
    posts - 37, comments - 143, trackbacks - 0, articles - 0
            項(xiàng)目中使用了FreeMarker做為視圖技術(shù),相對來說因?yàn)閒reemarker在視圖上有一些邏輯處理功能,某些地方就顯得比較方便,特別是macro的使用,當(dāng)然也不是說JSP就沒有這個功能,只是以前用JSP寫起來沒有這么順手。
           那么遵從前臺開發(fā)的一些基本原則,F(xiàn)TL(指freemarker模板文件)、CSS、JS都可以分得比較清晰。按照以前的技巧,在做Ajax請求的時候,都是前臺用JS框架(例如jquery)發(fā)送請求,Server端處理后用JSON結(jié)果返回。用struts2,到現(xiàn)在已經(jīng)是2.2.1版本了,都覺得很方便!一般都是加上struts-json的Plugin來響應(yīng)JSON的結(jié)果。
           老是覺得麻煩的地方在于:JSON是純數(shù)據(jù)的組織形式,在Server處理完后,要響應(yīng)頁面,得先組織成json,到了頁面,響應(yīng)得到了json,又得取出來,動態(tài)添加到DOM中的某個地方;數(shù)據(jù)添加的同時,還有可能得使用js對樣式進(jìn)行一些效果渲染。總體來說,這就使得前臺的js有點(diǎn)羅嗦,比如常見的就要append(html),這些html是用js字符串生成的,看著感覺很不舒服。
           發(fā)現(xiàn)struts2有一個特殊的類型叫:plainText,可以把type類型定義為它,這樣頁面響應(yīng)獲取得到的就是源代碼樣式的內(nèi)容。這個功能大概就是為了給那些需要返回源代碼的頁面使用的。那么換個思路就是說,這返回的type就可以針對上面提出問題中,解決了已經(jīng)組織好數(shù)據(jù)和樣式的內(nèi)容。返回的內(nèi)容不僅包含了數(shù)據(jù),也包含了樣式,和你直接返回一個HTML是一樣,不過一般我們都需要動態(tài)生成html。把結(jié)果直接嵌入在HTML中,就可以顯示出來,不再需要用js進(jìn)行組織。利用這個特點(diǎn),做了個測試。發(fā)現(xiàn)行得通!
           1. 首先,配置struts.xml文件,添加如下代碼:
    <package name="pt" extends="struts-default">
            
    <action name="test" class="test.TestAction">
                
    <result type="plainText">
                    
    <param name="location">/test.ftl</param>
                    
    <param name="charSet">GBK</param>
                
    </result>
            
    </action>
        
    </package>
            注意到了2.2.1版本,原來的plaintext寫法不知道從哪個版本開始已經(jīng)不支持了,要有大寫T開頭,plainText,一個小細(xì)節(jié),免得啟動時老是報錯。
           2. Action的代碼
    public class TestAction extends ActionSupport {
        
    private String msg;
        
    public String getMsg() {
            
    return msg;
        }

        
    public void setMsg(String msg) {
            
    this.msg = msg;
        }

        @Override
        
    public String execute() throws Exception {
            setMsg(
    "我是Test");
            Configuration cfg 
    = new Configuration();
            cfg.setServletContextForTemplateLoading(ServletContextUtil.getContext(), 
    "/template");
            Template t 
    = cfg.getTemplate("test.ftl");
            ServletContextUtil.getResponse().setContentType(
    "text/html;charaset=" + t.getEncoding());
            Writer out 
    = ServletContextUtil.getResponse().getWriter();
            Map root 
    = new HashMap();
            root.put(
    "msg", getMsg());
            t.process(root, out);
            
    return null;
        }

    }
           這是臨時隨便寫的,變量大概在正式項(xiàng)目中不會這樣定義,這只是一個測試而已。這里要注意,不要返回SUCCES,因?yàn)槟菢臃祷氐氖窃次募瑳]有填充入數(shù)據(jù)的ftl文件,到了前臺也沒用。所以這里有點(diǎn)小麻煩,必須用Freemarker的API,把固定的模板,用數(shù)據(jù)填充后,用out寫出,最后return null即可!
          3. 下面是ftl文件
    <div style="color:red;">This is a plainText: ${msg}</div>
           這樣前臺接收到的,就是這個經(jīng)過填充和渲染后的ftl頁面,和正常的html一樣。你可以把這個頁面做得足夠復(fù)雜。在需要嵌入的頁面上,用jquery之類的調(diào)用后放入DOM中即可以。
           比如下面這樣的,把獲取得到的內(nèi)容,填充入id為myDiv的DOM節(jié)點(diǎn)中。 
    $("#myDiv").load("test.action");
           話說回來,也不是所有地方都建議這樣,有些地方,比如ajax填充一個下拉列表,或是僅僅列出一些簡單的數(shù)據(jù),就不建議這么大費(fèi)周章。直接用JSON處理更來得簡單。這個技巧適用的場景是那些沒有iframe架構(gòu)的頁面,又需要ajax響應(yīng)局部的具有一些組織形式的內(nèi)容。如果你頁面都是include方式來進(jìn)行劃分,又想可以Aajx引入一個比較復(fù)雜的頁面,也許這種思路可以省掉很多麻煩。具體的應(yīng)用還需要進(jìn)一步的實(shí)踐!  

    剛進(jìn)場的時候戲就落幕

    Feedback

    # re: Struts2+FreeMarker中利用plainText處理Ajax的一個技巧  回復(fù)  更多評論   

    2010-11-10 23:55 by wenlin
    struts2 中可以用 return Action.NONE 來代替 return null

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产精品专区| 成人免费无毒在线观看网站| 日木av无码专区亚洲av毛片| 免费观看四虎精品国产永久| 中国xxxxx高清免费看视频| 三年在线观看免费观看完整版中文 | 久久精品国产亚洲AV不卡| 免费观看的a级毛片的网站| 人妻丰满熟妇无码区免费| 国产无遮挡色视频免费观看性色| 亚洲精品无码久久久久秋霞| 亚洲日本在线电影| 久久亚洲精品国产精品婷婷| 亚洲av永久无码一区二区三区| 亚洲中文字幕无码久久2020| 亚洲精品无码中文久久字幕| 国产精品久久亚洲一区二区 | 亚洲国产精品13p| 亚洲精品无码永久在线观看你懂的| 国产∨亚洲V天堂无码久久久| 老色鬼久久亚洲AV综合| 亚洲一级黄色大片| 免费在线观看一区| 东北美女野外bbwbbw免费| 亚洲精品无码久久久久牙蜜区| 亚洲性线免费观看视频成熟| 国产AV旡码专区亚洲AV苍井空| 亚洲va中文字幕无码久久| 亚洲沟沟美女亚洲沟沟| 国产成人无码免费看片软件| 2021免费日韩视频网| 亚洲日韩图片专区第1页| 亚洲精品偷拍视频免费观看| 好吊妞998视频免费观看在线| 亚洲国产成人久久精品app| 亚洲欧洲日韩不卡| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 114级毛片免费观看| 亚洲高清无码专区视频| 亚洲粉嫩美白在线| 黄在线观看www免费看|