91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

郵件審批:表單作為郵件內容展示問題處理過程1——下拉菜單select問題

發布時間:2020-06-12 13:35:03 來源:網絡 閱讀:956 作者:gaochaojs 欄目:web開發

   在仿照費控和用友做郵件審批時,增加了對表單內容的顯示。在系統中做審批時,表單內容有豐富的控件展示,簡單的有input,textarea,radio,復雜的有自定義的審批控件、附件控件和人員選擇器等。目前復雜控件展示沒有問題,復雜控件為只讀狀態時,展示給用戶的就是普通的input或table;簡單控件中當為select時出現無法綁定值的問題。即不管其選中項是什么,展示出來的始終是第一項。

   根據問題癥狀,之前在審批展示時,也出現過因下拉菜單展示有問題(如始終展示第一項或最后一項)導致的問題。究其根源是由于對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值,然后將對應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只提供了解析接口,希望通過重寫某些方法實現思路1中的方案,但freemarker的解析沒有找到源碼,可能代價較大,放棄;   

   3.在網頁中選中elements,發現val值被過濾,validate(jQuery的validate)也被濾除;

   跟蹤相應代碼發現freemarker生成的html并無問題;一直向后跟蹤至javaMail發送郵件的content的set處,content值也沒有問題。在進行跟蹤時,發現content的type是Multipart/mixed,mixed格式一般是指包含豐富展現的情況,于濾除val值和validate無關。

   4.由于validate是jquery所支持的,考慮到可能與jQuery未被引入有關。OA系統中存在jQuery,是存儲在服務器靜態資源中,oa在提供服務的時候,可以讀取,由于oa需要通過***訪問,所以初步斷定直接引用oastatic中的jquery是拿不到的。在內網、外網訪問該靜態資源地址時做對比也印證了以上推斷。于是希望引入互聯網上的jquery資源,代碼如下:

from = from + "<script src=\"http://code.jquery.com/jquery-1.8.0.min.js\"></script>";

   如果是因為validate無法識別,導致val丟失,理論上加入jquery引入是可以解決的。但測試下來不光沒有解決,在F12搜索引入的script發現,script也被過濾掉,根本無法引入并解析執行。

  5.由于引入jQuery不成功,所以希望將所有的valieate直接過濾掉,使用如下正則表達式:

from = from.replaceAll("validate=\"(.*)}\"","");

   validate雖然被過濾掉,但val還是不存在。在html的select標簽的介紹中,可以看出,val和同時被過濾的validate都不是基本的屬性。所以解決的思路應該轉向郵箱正文展示應以最基本屬性為主。

  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;
			}

   經確認,問題解決。選中的option后會追加selected=true,顯示正常。該方式也解決了之前需要在各頁面或統一js中必須增加val轉換為selected=true的問題。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陆丰市| 连州市| 峨山| 德庆县| 涪陵区| 陆良县| 蒲城县| 崇州市| 周口市| 新巴尔虎左旗| 集安市| 广河县| 六安市| 梁山县| 尼玛县| 邳州市| 安塞县| 晋中市| 武夷山市| 梓潼县| 湾仔区| 晋州市| 宝应县| 高淳县| 右玉县| 法库县| 满洲里市| 涟水县| 安徽省| 三河市| 嘉兴市| 乌兰浩特市| 曲周县| 固原市| 吴忠市| 罗江县| 富阳市| 从江县| 巨野县| 融水| 湘潭市|