网页页面NULL值对浏览器兼容性的影响

网页页面NULL值对浏览器兼容性的影响

      近期做项目中一个页面中的input radio出现浏览器兼容性问题。

主要问题:

在谷歌浏览器,360急速模式和搜狗急速模式中给radio初始动态赋值时。checked属性失效,无法选中。注:360急速模式和搜狗急速模式使用了谷歌chorme的内核(又称webkit内核)。

在火狐浏览器中给radio初始动态赋值时,checked属性正常选中。

本来同事以为是浏览器兼容问题,始终未能解决这个问题。后来这个Bug交由我来改动。

初始接到任务时,也怀疑是浏览器兼容问题,但后来细致一想。谷歌这么牛皮的技术实力,出问题的几率应该比較小,遂从代码本身查找问题。后来发现原来是有一个EL表达式的值附了NULL值,影响了radio的选中,才出现了浏览器不兼容的Bug。

总结经验教训。对NULL值的推断。十分必要,特别是页面中JQuery不会对隐性错误进行提示。

先给出问题的代码块。主要功能是依据后台传參选择radio是否选中。

<%-- <c:choose>
                      <c:when test="${gj.notmodelbad=='1' }">
                         <input type="radio" name="nobad"   value="1" checked="checked" style="margin-left:18px;"/><label style="margin-left:5px;font-size:14px;">信息描写叙述不符,无法推断</label><br />
                         <input type="radio" name="nobad"   value="2" style="margin-left:112px;font-size:14px;"/><label style="margin-left:5px;font-size:14px;">现场分析部件正常,非我司模块问题</label>
                      </c:when>
                      <c:when test="${gj.notmodelbad=='2' }">
                         <input type="radio" name="nobad"   value="1"  style="margin-left:18px;"/><label style="margin-left:5px;font-size:14px;">信息描写叙述不符,无法推断</label><br />
                         <input type="radio" name="nobad"   value="2" checked="checked" style="margin-left:109.5px;font-size:14px;"/><label style="margin-left:5px;font-size:14px;">现场分析部件正常,非模块问题</label>
                      </c:when>
                      <c:otherwise>
                         <input type="radio" name="nobad"   value="1"  style="margin-left:18px;"/><label style="margin-left:5px;font-size:14px;">信息描写叙述不符。无法推断</label><br />
                         <input type="radio" name="nobad"   value="2" style="margin-left:112px;font-size:14px;"/><label style="margin-left:5px;font-size:14px;">现场分析部件正常,非我司模块问题</label>
                      </c:otherwise>
                    </c:choose> --%>

EL表达式${gj.notmodelbad}的值可能为空,需进行处理。

我的解决方式:加入JQuery。依据后台传參动态赋值。

<div>
                  <c:choose>
            	     <c:when test="${gj.badtype=='2'}">
            	       <input type="checkbox" value="2" id="nomd" checked="checked"/>
            	     </c:when>
            	     <c:otherwise>
            	       <input type="checkbox" id="nomd" value="2" />
            	     </c:otherwise>
            	  </c:choose>
                  <label><strong>非模块不良</strong></label>

					<table class="bdrighttab">
						<tr>
							<td style="width:100px;"><input id="nobadRad1" type="radio"
								name="nobad" value="1" style="margin-left:112px;" /><label
								style="margin-left:5px;font-size:14px;">信息描写叙述不符。无法推断</label><br />
								<input id="nobadRad2" type="radio" name="nobad" value="2"
								style="margin-left:112px;font-size:14px;" /><label
								style="margin-left:5px;font-size:14px;">现场分析部件正常。非我司模块问题</label>
								<input type="text"
								style="background-color:#e4e4e4;border-style:solid;border-color:#B0B0B0;border-width:thin;"
								class="otherreason" value="${gj.otherreason}" /></td>
						</tr>
						<%-- <c:choose>
                      <c:when test="${gj.notmodelbad=='1' }">
                         <input type="radio" name="nobad"   value="1" checked="checked" style="margin-left:18px;"/><label style="margin-left:5px;font-size:14px;">信息描写叙述不符,无法推断</label><br />
                         <input type="radio" name="nobad"   value="2" style="margin-left:112px;font-size:14px;"/><label style="margin-left:5px;font-size:14px;">现场分析部件正常,非我司模块问题</label>
                      </c:when>
                      <c:when test="${gj.notmodelbad=='2' }">
                         <input type="radio" name="nobad"   value="1"  style="margin-left:18px;"/><label style="margin-left:5px;font-size:14px;">信息描写叙述不符,无法推断</label><br />
                         <input type="radio" name="nobad"   value="2" checked="checked" style="margin-left:109.5px;font-size:14px;"/><label style="margin-left:5px;font-size:14px;">现场分析部件正常,非模块问题</label>
                      </c:when>
                      <c:otherwise>
                         <input type="radio" name="nobad"   value="1"  style="margin-left:18px;"/><label style="margin-left:5px;font-size:14px;">信息描写叙述不符。无法推断</label><br />
                         <input type="radio" name="nobad"   value="2" style="margin-left:112px;font-size:14px;"/><label style="margin-left:5px;font-size:14px;">现场分析部件正常,非我司模块问题</label>
                      </c:otherwise>
                    </c:choose> --%>
					</table>
				</div>

            </div>

JQuery动态赋值:

      $(document).ready(function(){  

		var notmodelbad = ${gj.notmodelbad};
		if(notmodelbad=='1'){
			$("#nobadRad1").attr("checked",true);
			$("#nobadRad2").attr("checked",false);
		}
		else if(notmodelbad=='2'){
			$("#nobadRad1").attr("checked",false);
			$("#nobadRad2").attr("checked",true);
		}

	});  

后台的.do型方法

// 市场并联交互
    @RequestMapping("maMutualGd.do")
    public String MaMutualGd(HttpServletRequest request,
	    HttpServletResponse response) throws Exception {
	String type = request.getParameter("type");
	int marketjiaohuid = Integer.valueOf(request.getParameter("id"));
	String vCode = String.valueOf((request.getParameter("vcode")));
	String date_from1 = String.valueOf((request.getParameter("datfrom")));
	String date_to1 = String.valueOf((request.getParameter("datto")));
	getCurrentInfo(type, vCode, date_from1, date_to1);
	List<OdspappTGongdan> odspappTGongdanDtoList = qualityPerformanceService
		.getOdspappTGongdanDtoList();
	List<OdspappTGongdan> gdlist = new ArrayList<OdspappTGongdan>();
	List<OdspappTGongdan> gdcloselist = new ArrayList<OdspappTGongdan>();
	for (OdspappTGongdan g : odspappTGongdanDtoList) {
	    if (g.getJiaohustatus().equals("4")) {
		gdcloselist.add(g);
	    } else {
		gdlist.add(g);
	    }
	}
	OdspappTGongdan gd = new OdspappTGongdan();
	if (type.substring(1, 2).equals("0")) {
	    gd = gdlist.get(marketjiaohuid);
	    request.setAttribute("gd", gd);
	} else {
	    gd = gdcloselist.get(marketjiaohuid);
	    request.setAttribute("gd", gd);
	}
	GongdanBadJiaohu gj = qualityPerformanceService.getGdJiaohuInfo(
		gd.getGdCode(), gd.getZyAccount());
	if (gj.getChangestatus() == null || gj.getChangestatus() == "") {
	    gj.setChangestatus("0");
	}
	if (gj.getNotmodelbad() == null || gj.getNotmodelbad() == "") {
	    gj.setNotmodelbad("0");
	}
	System.out.println("Changestatus:" + gj.getChangestatus());
	System.out.println("Notmodelbad:" + gj.getNotmodelbad());

	request.setAttribute("gj", gj);
	// request.getRequestDispatcher("UserEvaluation.jsp").forward(request,
	// response);
	return "pages/usersEvaluation/UserMutual";
    }

处理后的效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

补充。此问题另一种简单的处理方式,就是用图片取代radio。选中或不选中,换两张图即可。

问题代码尽管不是本人所写。但也提醒了我对Java空值处理的重要性。以后写代码时一定要增加NULL的推断,有时我们遇到的大多数空指针异常,基本都是未初始化导致的NULL值异常。

时间: 2024-12-26 12:47:17

网页页面NULL值对浏览器兼容性的影响的相关文章

CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运行平台还存在差异.屏幕分辨率不一样,大小不一样,比例不一样.兼容性主要可以分类为: 1).CSS兼容2).JavaScript兼容3).HTML兼容 这三类也是前端的主要组成部分,都存在一定的兼容性问题,知己知彼,百战百胜,我们先了解浏览器的发动机—内核. 多年前我们一直为IE6兼容烦恼,为它没少加

HTML`CSS_网站页面不同浏览器兼容性问题解决

目前,最为流行的浏览器共有五个:分别是ie,Edge浏览器(属于微软),火狐,谷歌(chrome)Safari和Opera五大浏览器. Trident内核:IE ,360,,猎豹,百度: Gecko内核:火狐----------->这个浏览器内核是开源的浏览器内核,插件非常多,-------------->缺点:打开速度慢(加载flash插件)<-----额外介绍----->. Presto内核:Opera7及以上版本 Webkit:遨游,苹果 ,symbian:Safari.Ch

网御星云WAF的配置页面与浏览器兼容性问题

有一旧的WAF设备要用起来,同事已经提前测试出了管理口IP和账号密码,机器上架后登录控制台,新建"真实服务器"填了IP后点击"提交"按钮没有任何反应.试了很多次换不同IP都没反应,而且"应用防护"几个选项都显示空白,本以为是该设备恢复了出厂设置,加之会不会是授权过期导致的. 再请同事通过远程连过来检查,测试一番也是同样情况.只是通过其它操作设置我看到了以前配置的服务器IP,虽然也是点击"提交"没有反应,但是确实设置的IP在列表

深入理解浏览器兼容性模式

摘要:关于各种浏览器模式,网上已经有许多文档和资料了,但是很少有能够完全将几个概念阐述清楚的.大部分的资料稍显过时,有些内容可能已经不再适用了.本文中笔者将尽可能将几个概念阐述清楚,并去掉一些过时的内容,仅保留必要的干货. 想必你一定知道浏览器有个标准(Standards)模式和一个怪异(Quirks)模式,或许你还听说过有个"准标准(Almost Standards)"模式.而当你打开Internet Explorer的时候,又看到了什么浏览器模式.文档模式,还有什么兼容性视图等等.

IE浏览器兼容性模式

最近支持公司的一个内部业务管理系统,系统是基于jQuery来实现:用了2年的MVVM框架的我转向这个完全使用jQuery框架来开发的系统,真是相当不爽(相信用过MVVM框架的跟我是相同的感受):更为憋屈的是,到了这个年代,IE的亲爹微软都放弃支持IE6-10了,系统尽然还只支持使用IE浏览器(运营电脑安装都是IE8浏览器,所以大部分只管IE8),其他高级浏览器不被支持(当然这是由于系统使用了基于IE的一些插件导致). 但是话又说回来,但是在支持系统的开发过程中,经常看到X-UA-Compatib

常见的浏览器兼容性问题大汇总

常见的浏览器兼容性问题大汇总 1 ie6.0横向margin加倍 产生因素:块属性.float.有横向margin. 解决方法:display:inline: 2 ie6.0下默认有行高 解决方法:overflow:hidden;或font-size:0;或line-height:xx px: 3 在各个浏览器下img有空隙(原因是:回车.) 解决方法:让图片浮动. 4 一个父标签与几个子标签嵌套,父标签不浮动,子标签float,子标签不撑开父的高度. 解决方法:a 在子标签最后清浮动{<div

浏览器兼容性问题汇总

# 浏览器兼容性问题汇总 ## 问题1 ### first-child ## <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> div p:first-child { color: red; } </style> </head> <

脚本的浏览器兼容性问题

1.window对象不要去掉 window.parent.location 2.firefox和ie内置的对象确实不一样,你用jquery吧这个是跨浏览器的,只需要 $("#yourID").parent()就直接可以得到了 很方便,而且jquery也比较小,只有几十k,现在浏览器这么多 不可能不用跨浏览器解决方案的. 楼主不是通过http协议访问的吧,通过file协议webkit核心(chrome和360极速模式)parent,opener不能互访,会报错 以下以 IE 代替 Int

web前端开发的浏览器兼容性

首先我们来看一下目前市面上常见的一些浏览器:ie.chrome.firefox.safari.opera.maxthon.360.qq.yy.uc.sogou.2345.淘宝.猎豹.世界之窗等 其中表现很出色的有chrome.firefox.safari等:而表现极差的就是ie6/7内核浏览器了,我们的兼容性工作大半都是围绕这两个浏览器内核展开 我们的常规处理方式是调试各浏览器网页显示效果.使用成熟的前端开发框架.运用css与hack技巧等 常见hack技巧 css _:ie6内核浏览器识别 c