您好,登錄后才能下訂單哦!
在仿照費控和用友做郵件審批時,增加了對表單內(nèi)容的顯示。在系統(tǒng)中做審批時,表單內(nèi)容有豐富的控件展示,簡單的有input,textarea,radio,復(fù)雜的有自定義的審批控件、附件控件和人員選擇器等。目前復(fù)雜控件展示沒有問題,復(fù)雜控件為只讀狀態(tài)時,展示給用戶的就是普通的input或table;簡單控件中當為select時出現(xiàn)無法綁定值的問題。即不管其選中項是什么,展示出來的始終是第一項。
根據(jù)問題癥狀,之前在審批展示時,也出現(xiàn)過因下拉菜單展示有問題(如始終展示第一項或最后一項)導(dǎo)致的問題。究其根源是由于對select的val的不支持,解決方案是增加以下js代碼
$("select").each(function(index, element) { $(this).attr("style", "color:rgb(0, 0, 0)"); var _val = $(element).attr("val"); if (_val) { $("option[value='" + _val + "']", $(element)).attr( "selected", "selected"); } });
以上的思路即為先即得select的val值,然后將對應(yīng)val值的option選項置為selected。
以下是整個解決過程:
1.首先對以上思路進行測試,加入代碼:
from = from +"<script type=\"text/javascript\">$(function(){$(\"select\").each(function(index, element) {var _val = $(element).attr(\"val\");if (_val) {$(\"option[value='\" + _val + \"']\", $(element)).attr(\"selected\", \"selected\")}});});</script>";
由于缺失jquery,所以肯定是失敗的。
2.由于freemarker只提供了解析接口,希望通過重寫某些方法實現(xiàn)思路1中的方案,但freemarker的解析沒有找到源碼,可能代價較大,放棄;
3.在網(wǎng)頁中選中elements,發(fā)現(xiàn)val值被過濾,validate(jQuery的validate)也被濾除;
跟蹤相應(yīng)代碼發(fā)現(xiàn)freemarker生成的html并無問題;一直向后跟蹤至javaMail發(fā)送郵件的content的set處,content值也沒有問題。在進行跟蹤時,發(fā)現(xiàn)content的type是Multipart/mixed,mixed格式一般是指包含豐富展現(xiàn)的情況,于濾除val值和validate無關(guān)。
4.由于validate是jquery所支持的,考慮到可能與jQuery未被引入有關(guān)。OA系統(tǒng)中存在jQuery,是存儲在服務(wù)器靜態(tài)資源中,oa在提供服務(wù)的時候,可以讀取,由于oa需要通過***訪問,所以初步斷定直接引用oastatic中的jquery是拿不到的。在內(nèi)網(wǎng)、外網(wǎng)訪問該靜態(tài)資源地址時做對比也印證了以上推斷。于是希望引入互聯(lián)網(wǎng)上的jquery資源,代碼如下:
from = from + "<script src=\"http://code.jquery.com/jquery-1.8.0.min.js\"></script>";
如果是因為validate無法識別,導(dǎo)致val丟失,理論上加入jquery引入是可以解決的。但測試下來不光沒有解決,在F12搜索引入的script發(fā)現(xiàn),script也被過濾掉,根本無法引入并解析執(zhí)行。
5.由于引入jQuery不成功,所以希望將所有的valieate直接過濾掉,使用如下正則表達式:
from = from.replaceAll("validate=\"(.*)}\"","");
validate雖然被過濾掉,但val還是不存在。在html的select標簽的介紹中,可以看出,val和同時被過濾的validate都不是基本的屬性。所以解決的思路應(yīng)該轉(zhuǎn)向郵箱正文展示應(yīng)以最基本屬性為主。
6.仍然按照思路1,將select使用val指定選中項,改為按照option selected,使用正則表達式替換,代碼如下:
if(readHtml.contains("select")){ String regex = "value=\"" + value + "\""; String str = readHtml; Pattern pat = Pattern.compile(regex); Matcher matcher = pat.matcher(str); while (matcher.find()) { String temp = str.substring(matcher.start(),matcher.end()); str = str.replaceAll(temp, temp.substring(0,temp.lastIndexOf(value))+ "" + value + "\"" + " selected='true'"); } readHtml = str; }
經(jīng)確認,問題解決。選中的option后會追加selected=true,顯示正常。該方式也解決了之前需要在各頁面或統(tǒng)一js中必須增加val轉(zhuǎn)換為selected=true的問題。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。