天天看點

ueditor的配置和使用

   ueditor下載下傳好之後直接複制到項目的WebContent目錄下,并将ueditor\jsp\lib下的jar包複制或者剪切到項目的lib目錄下。先看一下效果,如下:

ueditor的配置和使用

   首先在ueditor/jsp目錄下找到config.json檔案,就拿Image上傳來說吧。

   "imageUrlPrefix": "http://localhost:8080/HJZGG_BLOG", /* 圖檔通路路徑字首 */。開始的時候imageUrlPrefix這個屬性值是空的。

     另外一個就是"imagePathFormat": "/fileUpload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳儲存路徑,可以自定義儲存路徑和檔案名格式 */。這個我已經改過了。

如果項目中使用了Apache Struts2架構,将/* 過濾 ,由于該架構預設使用Apache的Commons FileUpload元件,和内建的FileUploadInterceptor攔截器實作檔案上傳,将request中的檔案域封裝到action中的一個File類型的屬性中,并删除request中的原有檔案域,這樣就會導緻ueditor檔案上傳不能成功。

解決辦法:重寫struct2的過濾器,對ueditor的請求不進行過濾。

注意:隻是重寫StrutsPrepareAndExecuteFilter的doFilter方法,不要重寫其他的,否則可能會出錯。

然後更改web.xml中filter的配置

      從ueditor/index.html中可以看到,執行個體化編輯器, 建議使用工廠方法getEditor建立和引用編輯器執行個體,如果在某個閉包下引用該編輯器,直接調用UE.getEditor('editor')就能拿到相關的執行個體,即如下:

        var ue = UE.getEditor('editor'), 我們可以找到函數的原型中還有一個參數,就是用來初始化ueditor的屬性的。函數原型位于ueditor.all.js中。

  初始化,例如:var ue = UE.getEditor('editor', {initialFrameHeight:340,initialFrameWidth:760,maximumWords:1000,autoHeightEnabled:false});

  我們定義了初始高度、初始寬度、最大輸入字數,不允許自動增高(尤其是最後這個,當你放入很大的圖檔後,編輯框總是會變得很高)

  如果我沒有設定autoHeightEnabled:false這個參數,編輯框總是會随着圖檔的拉伸變得很高。 

  圖檔上傳之後,滑鼠放在圖檔上,出現title屬性的内容,這個内容是圖檔的随機名稱,看着可不爽。

  解決辦法:首先看你引用的是ueditor.all.js還是ueditor.all.min.js, 到相應的檔案ctrl+F,尋找“loader.setAttribute('title', json.title || '')”,然後自己可以設定title的值。具體函數如下。

  首先找到ueditor.all.js這個檔案,ctrl+F尋找"plugins/autosave.js", 然後會發現一個save方法,本地的緩存都是通過這個函數儲存的。

       首先在sava方法裡增加一句,window.localStorage.setItem("local_data", saveData);儲存我們的資料,然後在頁面重新整理的時候讀出來,将之前的資料重新賦給ueditor。

方式2:函數跟蹤會發現:function save ( editor ){}函數中調用了me.setPreferences( saveKey, saveData ); 如果想找到saveData 就必須通過saveKey來找到,在ueditor 中的index.html中,提供了這樣的一個函數:

  也就是通過執行一個 execCommand 方法來執行一個 “getlocaldata”指令就可得到本地緩存的資料。ctrl+f尋找“getlocaldata”, 然後會找到下面的代碼:

  由于每次重新整理頁面或者頁面切換時,saveKey變量會初始化,就不會得到我們之前儲存的資料了。但是我們可根據給定計算savekey的方法來重新給savekey指派。savekey的初始化就在不遠處,很容易看到,如下。

  接着重新設定saveKey的值,作如下操作:

  然後在初始化ueditor時,調用UE.getEditor('editor').execCommand( "getlocaldata" )就可以看到緩存的資料

  最後一步将,緩存的資料重置到ueditor中

  1.ueditor初始化

  2.得到ueditor中的内容(調用ueditor中的getContent方法):UE.getEditor('editor').getContent().replaceAll('\n', '<br>', false);至于為什麼要将字元串中的換行符替換成<br>,是因為背景接收的時候,字元串換行符沒有了。這樣在展示的時候代碼的位置會出現錯亂。

  4.從資料庫中讀出存入的content,然後重置到ueditor中(用于随筆的更新)。注意,得到的content是個字元串,比如說是"...<p>."..."..</p>...",但是指派給js中的變量時,如:var content = "${sesson.content}"; 這樣就錯了,檢視源碼的就會發現,字元串中有很多的引号"。

  解決方法:var content = ${fn:replace(session.content, '\"', '\\\"')}, 将原始字元串中的引号 "  替換成  \" 。