在仿照費(fèi)控和用友做郵件審批時(shí),增加了對表單內(nèi)容的顯示。在系統(tǒng)中做審批時(shí),表單內(nèi)容有豐富的控件展示,簡單的有input,textarea,radio,復(fù)雜的有自定義的審批控件、附件控件和人員選擇器等。目前復(fù)雜控件展示沒有問題,復(fù)雜控件為只讀狀態(tài)時(shí),展示給用戶的就是普通的input或table;簡單控件中當(dāng)為select時(shí)出現(xiàn)無法綁定值的問題。即不管其選中項(xiàng)是什么,展示出來的始終是第一項(xiàng)。
成都創(chuàng)新互聯(lián)主營鳳岡網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),鳳岡h5小程序定制開發(fā)搭建,鳳岡網(wǎng)站營銷推廣歡迎鳳岡等地區(qū)企業(yè)咨詢
根據(jù)問題癥狀,之前在審批展示時(shí),也出現(xiàn)過因下拉菜單展示有問題(如始終展示第一項(xiàng)或最后一項(xiàng))導(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選項(xiàng)置為selected。
以下是整個(gè)解決過程:
1.首先對以上思路進(jìn)行測試,加入代碼:
from = from +"";
由于缺失jquery,所以肯定是失敗的。
2.由于freemarker只提供了解析接口,希望通過重寫某些方法實(shí)現(xiàn)思路1中的方案,但freemarker的解析沒有找到源碼,可能代價(jià)較大,放棄;
3.在網(wǎng)頁中選中elements,發(fā)現(xiàn)val值被過濾,validate(jQuery的validate)也被濾除;
跟蹤相應(yīng)代碼發(fā)現(xiàn)freemarker生成的html并無問題;一直向后跟蹤至javaMail發(fā)送郵件的content的set處,content值也沒有問題。在進(jìn)行跟蹤時(shí),發(fā)現(xiàn)content的type是Multipart/mixed,mixed格式一般是指包含豐富展現(xiàn)的情況,于濾除val值和validate無關(guān)。
4.由于validate是jquery所支持的,考慮到可能與jQuery未被引入有關(guān)。OA系統(tǒng)中存在jQuery,是存儲(chǔ)在 如果是因?yàn)関alidate無法識別,導(dǎo)致val丟失,理論上加入jquery引入是可以解決的。但測試下來不光沒有解決,在F12搜索引入的script發(fā)現(xiàn),script也被過濾掉,根本無法引入并解析執(zhí)行。 5.由于引入jQuery不成功,所以希望將所有的valieate直接過濾掉,使用如下正則表達(dá)式: validate雖然被過濾掉,但val還是不存在。在html的select標(biāo)簽的介紹中,可以看出,val和同時(shí)被過濾的validate都不是基本的屬性。所以解決的思路應(yīng)該轉(zhuǎn)向郵箱正文展示應(yīng)以最基本屬性為主。 6.仍然按照思路1,將select使用val指定選中項(xiàng),改為按照option selected,使用正則表達(dá)式替換,代碼如下: 經(jīng)確認(rèn),問題解決。選中的option后會(huì)追加selected=true,顯示正常。該方式也解決了之前需要在各頁面或統(tǒng)一js中必須增加val轉(zhuǎn)換為selected=true的問題。from = from.replaceAll("validate=\"(.*)}\"","");
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;
}
分享題目:郵件審批:表單作為郵件內(nèi)容展示問題處理過程1——下拉菜單select問題
當(dāng)前網(wǎng)址:http://weahome.cn/article/gjhocs.html