邮件审批:表单作为邮件内容展示问题处理过程1——下拉菜单select问题

在仿照费控和用友做邮件审批时,增加了对表单内容的显示。在系统中做审批时,表单内容有丰富的控件展示,简单的有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需要通过vpn访问,所以初步断定直接引用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的问题。

时间: 2024-08-05 08:57:25

邮件审批:表单作为邮件内容展示问题处理过程1——下拉菜单select问题的相关文章

下拉菜单select 表单域

http://www.w3school.com.cn/                      W3C https://developer.mozilla.org/zh-CN/           MDN https://www.cnblogs.com/jin-xin/articles/7459955.html 原文地址:https://www.cnblogs.com/chenliangyuan/p/9780410.html

C#/asp.net文本长度判断、判断邮件格式、判断下拉菜单、判断是否为数字

/// <summary>        /// 文本长度判断        /// </summary>        public static bool TextLength(int min, int max, string s)        {            if (s.Length < min || s.Length > max)            {                return false;            }      

struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input

原文地址:struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input jsp页面 1     function dosearch() {2         if ($("#textValue").val() == "") {3                 $("#errortip").html("<font color='#FF0000'>请输入查询内容</font>")

表单开发(二):获取单选按钮,多行文本框,下拉菜单,捆绑元素数据,用户注册

单选按钮:<input type="radio"> 多行文本框:<textarea rows="5" cols="30"></textarea> 下拉菜单:seclet option <select name="home" ><!--下拉列表--> <option value="北 京">北 京</option> <o

jQuery/CSS3大屏下拉菜单 自定义子菜单内容

这是一款样式很酷的jQuery/CSS3下拉菜单,首先这款CSS3菜单是宽屏的,主要是下拉菜单非常大气,更重要的是,下拉菜单的内容可以自己定义,也就是说,下拉菜单中可以定义菜单.图片等HTML元素,是一款非常实用的jQuery/CSS3下拉菜单插件. 在线预览   源码下载

SharePoint 2010 隐藏个人操作Personal Action的部分内容(右上角下拉菜单)

SharePoint 2010 隐藏个人操作Personal Action的部分内容(右上角下拉菜单) 最近有个需求是隐藏个人操作Personal Action的部分内容(右上角下拉菜单),研究了一下需要更改Welcome.ascx文件. 文件位置: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\CONTROLTEMPLATES 在母版页中可以看到,母版页引用了这个ASP.NET控

JS 按钮下一步 下拉菜单内容转换

下一步按钮 用到的知识点 点击事件  onclick 移除属性  removeAttribute 创建属性  setAttribute 源代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <input id="aaa&qu

使用select下拉菜单筛选table表格内容

使用select下拉菜单筛选table表格内容:本章节介绍一下如何利用select下拉菜单对表单的内容进行筛选,如果数据量庞大,便于搜索使用的话,筛选效果还是非常有必要的,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/&qu

解决phpcms模版设置中不能显示栏目首页模板,栏目列表页模板,内容页模板等下拉菜单选项的问题!

第1步:检查相应的模版文件夹中是否有模版文件 一般地,查看目录phpcms/templates/default[模板风格标识]/content 栏目首页模板:以(category_)开头,category_xxx 栏目列表页模板:以(list_)开头,list_xxx 内容页模板:以(show_)开头,show_xxx 如果模板文件存在,看第二步. 第2步:查看文件夹中的模板文件是否包含了中文 例如:category - 副本.html 注意模板文件名不能有中文,因为在后台模板设置中获取模板文件