-------------------------------------------------------------------
@NotFound(action=NotFoundAction.IGNORE)使用hibernate
注解配置实体类的关联关系,在many-to-one,one-to-one关联中,一边引用自另一边的属性,如果属性值为某某的数据在数据库不存在了,hibernate默认会抛出异常。解决此问题,加上如下注解就可以了:
@NotFound(action=NotFoundAction.IGNORE),意思是找不到引用的外键数据时忽略,NotFound默认是exception
-------------------------------------------------------------------cascade = CascadeType.REFRESH,cascade=CascadeType.ALL
cascade表示级联操作
CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法
CascadeType.PERSIST级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据
CascadeType.REFRESH级联保存:对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法
CascadeType.REMOVE级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法
CascadeType.PERSIST只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态)
CascadeType.MERGE指A类新增或者变化,会级联B对象(新增或者变化)
CascadeType.REMOVE只有A类删除时,会级联删除B类;
CascadeType.ALL包含所有;
CascadeType.REFRESH没用过。
综上:大多数情况用CascadeType.MERGE就能达到级联跟新又不报错,用CascadeType.ALL时要斟酌下CascadeType.REMOVE
@Fetch:
定义了加载关联关系的获取策略. FetchMode 可以是
SELECT (在需要加载关联的时候触发select操作), SUBSELECT(只对集合有效,使用了子查询策略,详情参考Hibernate参考文档)
JOIN (在加载主实体(owner entity)的时候使用SQL JOIN来加载关联关系).
JOIN 将覆写任何延迟属性 (通过 JOIN策略加载的关联将不再具有延迟性).
-------------------------------------------------------------------fetch=FetchType.LAZYHibernate的数据加载方式: 1.即时加载 immediately loading 实体加载完成后,立即加载其关联的数据。
2.延迟加载lazy loading
实体相关联的数据在第一次访问时再进行读取。
3.预先加载 eager loading
与immediately loading类似,但实体和相关联的数据是通过一条sql同时读取。
4.批量加载 batch loading
?
------------------------------------------------------------------
EntityManager 的API
下面是EntityManager的一些主要的接口方法:
void
persist(Object entity)
通过调用EntityManager的persist()方法,新实体实例将转换为受控状态。这意谓着当persist()方法所在的事务提交时,实体的数据将保存到数据库中。如果实体已经被持久化,那么调用persist()操作不会发生任何事情。如果对一个已经删除的实体调用persist()操作,删除态的实体又转变为受控态。如果对游离状的实体执行persist()操作,将抛出IllegalArgumentException。 在一个实体上调用persist()操作,将广播到和实体关联的实体上,执行相应的级联持久化操作;
void
remove(Object entity)
通过调用remove()方法删除一个受控的实体。如果实体声明为级联删除(cascade=REMOVE 或者cascade=ALL ),被关联的实体也会被删除。在一个新建状态的实体上调用remove()操作,将被忽略。如果在游离实体上调用remove()操作,将抛出IllegalArgumentException,相关的事务将回滚。如果在已经删除的实体上执行remove()操作,也会被忽略;
void
flush()
将受控态的实体数据同步到数据库中;
T
merge(T entity)
将一个游离态的实体持久化到数据库中,并转换为受控态的实体;
T
find(Class entityClass, Object primaryKey)
以主键查询实体对象,entityClass是实体的类,primaryKey是主键值,如以下的代码查询Topic实体: Topic t = em.find(Topic.class,1); Query createQuery(String qlString) 根据JPA的查询语句创建一个查询对象Query,如下面的代码:
Query q= em.createQuery(""SELECT t FROM Topic t WHERE t.topicTitle LIKE :topicTitle")"); Query createNativeQuery(String sqlString)
使用本地数据库的SQL语句创建一个Query对象,Query通过getResultList()方法执行查询后,返回一个List结果集,每一行数据对应一个Vector。
使用本地数据库的SQL语句创建一个Query对象,Query通过getResultList()方法执行查询后,返回一个List结果集,每一行数据对应一个Vector。
看来要学习的东东还有好多啊~~努力吧!
posted @
2013-03-05 11:51 老天 阅读(3881) |
评论 (1) |
编辑 收藏
1、@Transient 使用场景:一般在模型中对应某一个字段的属性中的set和get方法中。作用是数据与数据库中不一一对应。如:
/*@Transient public String getModulename() {
return modulename;
}
public void setModulename(String modulename) {
this.modulename = modulename;
}*/
2、@ManyToOne
多对一。可以把另一个模型对应过来。在查询时,无需要联表查询。
@JoinColumn(name="moduleid",insertable=false,updatable=false)
@NotFound(action=NotFoundAction.IGNORE)
public CateModule getCateModule() {
return cateModule;
}
public void setCateModule(CateModule cateModule) {
this.cateModule = cateModule;
}
posted @
2012-12-03 11:09 老天 阅读(236) |
评论 (0) |
编辑 收藏
private Object filterHTMLTag(Object obj) throws Exception{
if(obj==null) return obj;
Class objCls=obj.getClass();
Field[] allFields=objCls.getDeclaredFields();
if(allFields!=null && allFields.length!=0){
HTMLFilter filter=new HTMLFilter();
for(Field field: allFields){
if(field!=null){
if(field.getType().equals(String.class)){
String getMethod="get"+upperCaseFirstChar(field.getName());
String setMethod="set"+upperCaseFirstChar(field.getName());
try {
//String value=(String)objCls.getMethod(getMethod).invoke(obj);
//value=filter.filter(value);
//objCls.getMethod(setMethod, value.getClass()).invoke(obj, value);
} catch (Exception e) {
throw e;
}
}
}
}
}
return obj;
}
posted @
2012-12-03 10:49 老天 阅读(232) |
评论 (0) |
编辑 收藏
ALTER TABLE "public"."base_contract"
ADD COLUMN "isrejected" int2 DEFAULT 0 NOT NULL;
ALTER TABLE "public"."base_contract"
ADD COLUMN "userid" int8 DEFAULT 0 NOT NULL;
ALTER TABLE "public"."base_user"
ADD COLUMN "telphone" varchar(20) DEFAULT ''::character varying NOT NULL;
INSERT INTO "base_role" VALUES ('21', '代理商', '只能查看对属于自己的所有合同');
update base_contract a set userid=(SELECT b.userid from base_user b where a.username=b.username LIMIT 1)
delete from base_menu;
BEGIN;
INSERT INTO "base_menu" VALUES ('1', 'infoMenu', null, '公用菜单', null, null, null, null, 'Y', '0');
INSERT INTO "base_menu" VALUES ('2', 'ediUser', 'infoMenu', '修改个人资料', 'Note', 'ediUser.jsp', 'top', '2', 'N', '0');
COMMIT;
posted @
2012-11-28 18:21 老天 阅读(362) |
评论 (1) |
编辑 收藏
一:if指令:
<#if condition>...
<#elseif condition2>...
<#elseif condition3>...
...<#else>...
</#if>
二:switch
<#switch value>
<#case refValue1>...<#break>
<#case refValue2>...<#break>...
<#case refValueN>...<#break>
<#default>...</#switch>
三:list,break
<#list sequence as item>
...
</#list>
两个特殊的循环变量:
item_index: 当前变量的索引值。
item_has_next: 是否存在下一个对象。
可以用<#break/>指令离开loop循环。
四:include指令
<#include filename>或者
<#include filenameoptions>
filename: 表达式转换为字符串
options: encoding=encoding, parse=parse encoding: 表达式转换为字符串
parse: 表达式转换为逻辑值,是否作为ftl文件解析。
<#include "/common/navbar.html" parse=false encoding="Shift_JIS">
<#include "*/footer.ftl">表示当前目录下以及所有父目录下的文件。如果当前模版在/foo/bar/template.ftl ,那么查找footer.ftl的顺序为:/foo/bar/footer.ftl
/foo/footer.ftl/footer.ftl这种方式讲允许设计者将通用的模版放在父文件夹里面。
也可以只指定部分路径:<#include "*/commons/footer.ftl">
五:import指令<#import path as hash>
六:noparse
<#noparse>
...
</#noparse>
七:compress
<#compress>
...
</#compress>
八:escape,noescape
<#escape identifier as expression>
...
<#noescape>...</#noescape>
...
</#escape>
escape指令body区的ftl的interpolations都会被自动加上escape表达式。但是不会影响字符串内的interpolations。而且也只会影响到body内出现的interpolations,比如不会影响到include的ftl的interpolations。
<#escape x as x?html>
First name: ${firstName}
Last name: ${lastName}
Maiden name: ${maidenName}</#escape>
等同于:
First name: ${firstName?html}
Last name: ${lastName?html}
Maiden name: ${maidenName?html}
escape指令在解析模版时起作用,而不是运行时起作用。
escape指令还能嵌套使用,子继承父的escape规则。
<#escape x as x?html>
Customer Name: ${customerName}
Items to ship:
<#escape x as itemCodeToNameMap[x]>
${itemCode1}
${itemCode2}
${itemCode3}
${itemCode4}
</#escape></#escape>
等同于:Customer Name: ${customerName?html}
Items to ship:
${itemCodeToNameMap[itemCode1]?html}
${itemCodeToNameMap[itemCode2]?html}
${itemCodeToNameMap[itemCode3]?html}
${itemCodeToNameMap[itemCode4]?html}
九:assign指令
<#assign name=value>or<#assign name1=value1name2=value2... nameN=valueN>or<#assign same as above... in namespacehash>or<#assign name> capture this</#assign>or<#assign name in namespacehash> capture this</#assign>创建或者替换一个已经存在的变量,只能作用于顶层变量。不好的做法:<#assign x>Hello ${user}!</#assign>更改为:<#assign x="Hello ${user}!">
十:global指令
<#global name=value>
or
<#global name1=value1name2=value2... nameN=valueN>or<#global name>
capture this
</#global>
十一:local指令
<#local name=value>
or
<#local name1=value1name2=value2... nameN=valueN>or<#local name>
capture this
</#local>只能用于macro的定义body中。
十二:setting指令:
<#setting name=value>
name的取值范围:
local:number_format:
boolean_format:缺省值为"true,false"
date_format, time_format, datetime_format
time_zone:url_escaping_charset
classic_compatible
十三:用户自定义指令
<@macro_or_transfparam1=val1param2=val2...paramN=valN/><@macro_or_transfparam1=val1param2=val2...paramN=valN ; lv1, lv2, ..., lvN/><@macro_or_transf...> ...</@macro_or_transf><@macro_or_transf...> ...</@><@macro_or_transfval1, val2, ..., valN/>
十四:macro,nested,return
<#macro nameparam1param2... paramN>
...
<#nested loopvar1, loopvar2, ..., loopvarN>
...
<#return>
...
</#macro>
十五:function, return
<#function nameparam1param2... paramN>
... <#return returnValue>
...
</#function>
<#function avg x y>
<#return (x + y) / 2>
</#function>
${avg(10, 20)}
十六:flush
<#flush>
十七:stop
<#stop>
or
<#stop reason>取消处理模版。
十八:ftl指令
<#ftl param1=value1param2=value2...paramN=valueN>
ftl指令必须放在ftl文件的最上面。
参数范围:
encoding:
strip_whitespace
strip_text
strict_syntax
十九:t, lt, rt
二十:attempt, recover
<#attempt>
attempt block<#recover>
recover block
</#attempt>
<#attempt>
Optional content: ${thisMayFails}
<#recover>
Ops! The optional content is not available.
</#attempt>
posted @
2012-11-15 11:30 老天 阅读(418) |
评论 (0) |
编辑 收藏
<!-- http://www.iefans.net/ie8-filteralpha-png-touming/
IE8里可以这样写 -ms-filter:”progid:DXImageTransform.Microsoft.Alpha(opacity=50)”;
IE7里可以这样写 filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);
IE6,IE7,IE8里都可以这样写 filter:alpha(opacity=50)
-->
from:http://unc0pyrightable.blog.163.com/blog/static/1313300602010021526561/
今天推荐一个最完美让ie6支持png透明的js,为什么说它最完美呢?
只因为它支持background-position和background-repeat
这是市面上的其它方法比不上的
首先,要在网页中引用js
<!--[if IE 6]>
<script src="http://www.dillerdesign.com/experiment/DD_belatedPNG/DD_belatedPNG_0.0.8a-min.js"></script>
<script>
DD_belatedPNG.fix('.png_bg');
</script>
<![endif]-->
上面那个js路径是绝对路径,大家最好还是把它下下来,以防网站挂了.
引用之后就是更改第二个<script>里的.png为你要实现效果的选择器.
就比如,你#header引用了一个background,那你上面就要改为:
DD_belatedPNG.fix('#header');
并且它还支持组选择器,如:
DD_belatedPNG.fix('#header,h1,h2,h3,#content');
很简单吧,只要把有透明png的标签或选择器写在里面就行
至于这里面能不能支持css3就不得而知了.
官网:http://www.dillerdesign.com/experiment/DD_belatedPNG/
这个JS内容(DD_belatedPNG_0.0.8a-min.js),备存:
/**
* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>.
* Author: Drew Diller
* Email: drew.diller@gmail.com
* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/
* Version: 0.0.8a
* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license
*
* Example usage:
* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector
* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement
**/
var DD_belatedPNG={
ns:"DD_belatedPNG",imgSize:{
},delay:10,nodesFixed:0,createVmlNameSpace:function () {
if(document.namespaces&&!document.namespaces[this.ns]) {
document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")
}
},createVmlStyleSheet:function () {
var b,a;
b=document.createElement("style");
b.setAttribute("media","screen");
document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);
if(b.styleSheet) {
b=b.styleSheet;
b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");
b.addRule(this.ns+"\\:shape","position:absolute;");
b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");
this.screenStyleSheet=b;
a=document.createElement("style");
a.setAttribute("media","print");
document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);
a=a.styleSheet;
a.addRule(this.ns+"\\:*","{display: none !important;}");
a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")
}
},readPropertyChange:function () {
var b,c,a;
b=event.srcElement;
if(!b.vmlInitiated) {
return
}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1) {
DD_belatedPNG.applyVML(b)
}if(event.propertyName=="style.display") {
c=(b.currentStyle.display=="none")?"none":"block";
for(a in b.vml) {
if(b.vml.hasOwnProperty (a)) {
b.vml[a].shape.style.display=c
}
}
}if(event.propertyName.search("filter")!=-1) {
DD_belatedPNG.vmlOpacity(b)
}
},vmlOpacity:function (b) {
if(b.currentStyle.filter.search("lpha")!=-1) {
var a=b.currentStyle.filter;
a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;
b.vml.color.shape.style.filter=b.currentStyle.filter;
b.vml.image.fill.opacity=a
}
},handlePseudoHover:function (a) {
setTimeout(function () {
DD_belatedPNG.applyVML(a)
},1)
},fix:function (a) {
if(this.screenStyleSheet) {
var c,b;
c=a.split(",");
for(b=0;b<c.length;b++) {
this.screenStyleSheet.addRule(c[b],"behavior:expression(DD_belatedPNG.fixPng(this))")
}
}
},applyVML:function (a) {
a.runtimeStyle.cssText="";
this.vmlFill(a);
this.vmlOffsets(a);
this.vmlOpacity(a);
if(a.isImg) {
this.copyImageBorders(a)
}
},attachHandlers:function (i) {
var d,c,g,e,b,f;
d=this;
c={
resize:"vmlOffsets",move:"vmlOffsets"
};
if(i.nodeName=="A") {
e={
mouseleave:"handlePseudoHover",mouseenter:"handlePseudoHover",focus:"handlePseudoHover",blur:"handlePseudoHover"
};
for(b in e) {
if(e.hasOwnProperty (b)) {
c[b]=e[b]
}
}
}for(f in c) {
if(c.hasOwnProperty (f)) {
g=function () {
d[c[f]](i)
};
i.attachEvent("on"+f,g)
}
}i.attachEvent("onpropertychange",this.readPropertyChange)
},giveLayout:function (a) {
a.style.zoom=1;
if(a.currentStyle.position=="static") {
a.style.position="relative"
}
},copyImageBorders:function (b) {
var c,a;
c={
borderStyle:true,borderWidth:true,borderColor:true
};
for(a in c) {
if(c.hasOwnProperty (a)) {
b.vml.color.shape.style[a]=b.currentStyle[a]
}
}
},vmlFill:function (e) {
if(!e.currentStyle) {
return
}else {
var d,f,g,b,a,c;
d=e.currentStyle
}for(b in e.vml) {
if(e.vml.hasOwnProperty (b)) {
e.vml[b].shape.style.zIndex=d.zIndex
}
}e.runtimeStyle.backgroundColor="";
e.runtimeStyle.backgroundImage="";
f=true;
if(d.backgroundImage!="none"||e.isImg) {
if(!e.isImg) {
e.vmlBg=d.backgroundImage;
e.vmlBg=e.vmlBg.substr(5,e.vmlBg.lastIndexOf('")')-5)
}else {
e.vmlBg=e.src
}g=this;
if(!g.imgSize[e.vmlBg]) {
a=document.createElement("img");
g.imgSize[e.vmlBg]=a;
a.className=g.ns+"_sizeFinder";
a.runtimeStyle.cssText="behavior:none; position:absolute; left:-10000px; top:-10000px; border:none; margin:0; padding:0;";
c=function () {
this.width=this.offsetWidth;
this.height=this.offsetHeight;
g.vmlOffsets(e)
};
a.attachEvent("onload",c);
a.src=e.vmlBg;
a.removeAttribute("width");
a.removeAttribute("height");
document.body.insertBefore(a,document.body.firstChild)
}e.vml.image.fill.src=e.vmlBg;
f=false
}e.vml.image.fill.on=!f;
e.vml.image.fill.color="none";
e.vml.color.shape.style.backgroundColor=d.backgroundColor;
e.runtimeStyle.backgroundImage="none";
e.runtimeStyle.backgroundColor="transparent"
},vmlOffsets:function (d) {
var h,n,a,e,g,m,f,l,j,i,k;
h=d.currentStyle;
n={
W:d.clientWidth+1,H:d.clientHeight+1,w:this.imgSize[d.vmlBg].width,h:this.imgSize[d.vmlBg].height,L:d.offsetLeft,T:d.offsetTop,bLW:d.clientLeft,bTW:d.clientTop
};
a=(n.L+n.bLW==1)?1:0;
e=function (b,p,q,c,s,u) {
b.coordsize=c+","+s;
b.coordorigin=u+","+u;
b.path="m0,0l"+c+",0l"+c+","+s+"l0,"+s+" xe";
b.style.width=c+"px";
b.style.height=s+"px";
b.style.left=p+"px";
b.style.top=q+"px"
};
e(d.vml.color.shape,(n.L+(d.isImg?0:n.bLW)),(n.T+(d.isImg?0:n.bTW)),(n.W-1),(n.H-1),0);
e(d.vml.image.shape,(n.L+n.bLW),(n.T+n.bTW),(n.W),(n.H),1);
g={
X:0,Y:0
};
if(d.isImg) {
g.X=parseInt(h.paddingLeft,10)+1;
g.Y=parseInt(h.paddingTop,10)+1
}else {
for(j in g) {
if(g.hasOwnProperty (j)) {
this.figurePercentage(g,n,j,h["backgroundPosition"+j])
}
}
}d.vml.image.fill.position=(g.X/n.W)+","+(g.Y/n.H);
m=h.backgroundRepeat;
f={
T:1,R:n.W+a,B:n.H,L:1+a
};
l={
X:{
b1:"L",b2:"R",d:"W"
},Y:{
b1:"T",b2:"B",d:"H"
}
};
if(m!="repeat"||d.isImg) {
i={
T:(g.Y),R:(g.X+n.w),B:(g.Y+n.h),L:(g.X)
};
if(m.search("repeat-")!=-1) {
k=m.split("repeat-")[1].toUpperCase();
i[l[k].b1]=1;
i[l[k].b2]=n[l[k].d]
}if(i.B>n.H) {
i.B=n.H
}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"
}else {
d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"
}
},figurePercentage:function (d,c,f,a) {
var b,e;
e=true;
b=(f=="X");
switch(a) {
case "left":case "top":d[f]=0;
break;
case "center":d[f]=0.5;
break;
case "right":case "bottom":d[f]=1;
break;
default:if(a.search("%")!=-1) {
d[f]=parseInt(a,10)/100
}else {
e=false
}
}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));
if(d[f]%2===0) {
d[f]++
}return d[f]
},fixPng:function (c) {
c.style.behavior="none";
var g,b,f,a,d;
if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR") {
return
}c.isImg=false;
if(c.nodeName=="IMG") {
if(c.src.toLowerCase().search(/\.png$/)!=-1) {
c.isImg=true;
c.style.visibility="hidden"
}else {
return
}
}else {
if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1) {
return
}
}g=DD_belatedPNG;
c.vml={
color:{
},image:{
}
};
b={
shape:{
},fill:{
}
};
for(a in c.vml) {
if(c.vml.hasOwnProperty (a)) {
for(d in b) {
if(b.hasOwnProperty (d)) {
f=g.ns+":"+d;
c.vml[a][d]=document.createElement(f)
}
}c.vml[a].shape.stroked=false;
c.vml[a].shape.appendChild(c.vml[a].fill);
c.parentNode.insertBefore(c.vml[a].shape,c)
}
}c.vml.image.shape.fillcolor="none";
c.vml.image.fill.type="tile";
c.vml.color.fill.on=false;
g.attachHandlers(c);
g.giveLayout(c);
g.giveLayout(c.offsetParent);
c.vmlInitiated=true;
g.applyVML(c)
}
};
try{
document.execCommand("BackgroundImageCache",false,true)
}catch(r) {
}DD_belatedPNG.createVmlNameSpace();
DD_belatedPNG.createVmlStyleSheet();
或者:
让IE6支持PNG格式的图片
用法:
先复制下面的代码在记事本中,然后另存为pngbehavior.htc(名字可以任意):
<public:componentlightWeight="true">
<public:attach event="onpropertychange"onevent="propertyChanged()" />
<public:attach event="onbeforeprint"onevent="beforePrint()" for="window"/>
<public:attach event="onafterprint"onevent="afterPrint()" for="window"/>
<script>
var supported = /MSIE ((5\.5)|[6789])/.test(navigator.userAgent)&&
navigator.platform== "Win32";
var realSrc;
var blankSrc = "blank.gif";
var isPrinting = false;
if (supported) fixImage();
function propertyChanged() {
if (!supported || isPrinting) return;
var pName = event.propertyName;
if (pName != "src") return;
// if not set to blank
if (!new RegExp(blankSrc).test(src))
fixImage();
};
function fixImage() {
// get src
var src = element.src;
// check for real change
if (src == realSrc&& /\.png$/i.test(src)) {
element.src =blankSrc;
return;
}
if ( ! new RegExp(blankSrc).test(src)) {
// backup old src
realSrc = src;
}
// test for png
if (/\.png$/i.test(realSrc)) {
// set blank image
element.src =blankSrc;
// set filter
element.runtimeStyle.filter= "progid:DXImageTransform.Microsoft." +
"AlphaImageLoader(src='"+ src + "',sizingMethod='scale')";
}
else {
// remove filter
element.runtimeStyle.filter= "";
}
}
function beforePrint() {
isPrinting = true;
element.src = realSrc;
element.runtimeStyle.filter = "";
realSrc = null;
}
function afterPrint() {
isPrinting = false;
fixImage();
}
</script>
</public:component>
最后在你的css文件里面加上这么一段代码:
img {
behavior: url("pngbehavior.htc");
}
posted @
2012-11-15 10:26 老天 阅读(183) |
评论 (0) |
编辑 收藏