在报表小工具助手中,有一个需求,编码列展现的还是编码,需要转换成对应的中文含义。
有几个思路:
1、直接在页面上进行判断匹配,但这种只适用于很少的编码替换,比如性别这类的。
2、想到使用自定义标签,根据自定义的规则,在标签中传入编码值,然后转化为对应的中文含义,这个可能比较通用,所以目前采取的是如此方案。
由于项目采用的是Struts2,所以导入相应的jar包,里面含有标签需要的jar。
代码实例:
1、数据库有一张编码表,关键字段如下:
codeID codeValue
编码的ID 编码的中文含义
2、JSP页面,页面上获取编码ID,需要转换成对应中文
<%@ taglib prefix="lsxy" uri="/lsxy"%>
<lsxy:Desc codeID=‘T101’ />
说明:引入自定义标签lsxy ,将需要转换的编码值传入。
3、根据页面自定义标签,定义标签结构文件 lsxy.tld 放于WEB-INF下:
lsxy.tld 内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>lsxy</short-name>
<uri>/lsxy</uri>
<display-name>"lsxy Tags"</display-name>
<!-- 编码描述标签:将编码换成对应的中文含义 -->
<tag>
<name>Desc</name>
<tag-class>lsxy.report.taglib.LsxyDescTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>codeID</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
说明:tag-class 说明自定义标签处理的自定义类。
4、自定义类 LsxyDescTag.java.
package lsxy.report.taglib;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lsxy.report.service.LsxyDescTagService;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
import com.opensymphony.xwork2.util.ValueStack;
public class LsxyDescTag extends ComponentTagSupport {
private static final long serialVersionUID = 1L;
private String codeID;
public String getCodeID() {
return codeID;
}
public void setCodeID(String codeID) {
this.codeID = codeID;
}
@Override
public Component getBean(ValueStack valueStack, HttpServletRequest request,
HttpServletResponse response) {
return new LsxyDescTagService(valueStack);
}
@Override
protected void populateParams() {
super.populateParams();
LsxyDescTagService service = (LsxyDescTagService) getComponent();
service.setCodeID(getCodeID());
}
}
5、服务处理类:LsxyDescTagService.java:
package lsxy.report.service;
import java.io.Writer;
import lsxy.report.dao.ReportCodeDao;
import org.apache.struts2.components.Component;
import com.opensymphony.xwork2.util.ValueStack;
public class LsxyDescTagService extends Component {
private String codeID;
public String getCodeID() {
return codeID;
}
public void setCodeID(String codeID) {
this.codeID = codeID;
}
public LsxyDescTagService(ValueStack stack) {
super(stack);
}
@Override
public boolean start(Writer writer) {
ReportCodeDao dao = new ReportCodeDao();
try {
writer.write(dao.getCodeDesc(codeID).toString());
} catch (Exception e) {
e.printStackTrace();
}
return super.start(writer);
}
}
"<%=Session['UserName']%>"正确形式应当为:
'<%=Session["UserName"]%>'
问题起因:HTML中引号多层嵌套问题
html中的超链接中比如有多层嵌套,很容易产生导致字符串被截取,字符文本中字符太多,等等等等很多问题
引号嵌套两层时,可以使用转义或者单双引号交替的形式实现,需要注意单双引号位置;当引号嵌套达到三四层的时候,问题就出现了,
怎么解决呢?
举个例子:"javascript:fnabc('nihao("123")')"
html的href=/blog_article/以上的字符串_/p/index.html>
那么即使加了转义字符,以上的字符串还是会被截取为"javascript:fnabc('nihao("
解决的方法是使用 " 代替引号
"javascript:fnabc('abcd("123")')"
1、在IE中如何调试SVG中的脚本
a、去掉IE设置中的“禁止脚本调试”
b、打开注册表,找到“[HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings]”,设置"JITDebug"=dword:00000001
c、然后就可以用vs.net来进行调试了
2、解决IE中需要点击才能激活svg插件的问题
编写一个脚本文件(embed.js),在脚本文件中写下如下代码:
document.write("<embed id='mapObject' type='image/svg-xml' src='/blog_article/map.svg' height='100%' width='100%' />");
在html代码中,插入SVG插件的代码这样写:
<div>
<script src=/blog_article/"/js/embed/index.html .js" language="javascript"></script>
</div>
3、在SVG embed上绘制HTML元素
设置embed元素的“wmode”属性的值为“transparent”
4、矩阵变化参数(transform="matrix(a,b,c,d,e,f)")
平移变换(translate) : (1,0,0,1,tx,ty)
伸缩变换(scale) : (sx,0,0,sy,0,0)
旋转变换(rotate) : (cos(a),sin(a),-sin(a),cos(a),0,0),a是旋转的角度
X轴歪斜变换(skewX): (1,0,tan(a),1,0,0),a是歪斜的角度
Y轴歪斜变换(skewY): (1,tan(a),0,1,0,0),a是歪斜的角度
5、中文字体对应的英文名称
English Name Localized Name
SimSun 宋体
SimHei 黑体
FangSong_GB2312 仿宋_GB2312
KaiTi_GB2312 楷体_GB2312
YouYuan 幼圆
STSong 华文宋体
STZhongsong 华文中宋
STKaiti 华文楷体
STFangsong 华文仿宋
STXihei 华文细黑
STLiti 华文隶书
STXingkai 华文行楷
STXinwei 华文新魏
STHupo 华文琥珀
STCaiyun 华文彩云
FZYaoTi 方正姚体简体
FZShuTi 方正舒体简体
NSimSun 新宋体
LiSu 隶书
6、判断鼠标事件来源
在SVG中会经常遇到判断鼠标事件来源的问题,比如:鼠标单击或者双击、滚轮事件等等。这里做一个简单的
介绍。
判断鼠标是左键还是右键?
在onclick事件中,if(evt.button==0)则为左击,否则为右击
无论单击还是双击evt.detail==1
判断鼠标是单击还是双击?
在onclick事件中,if(evt.detail==2)则为双击,否则为单击
判断鼠标的滚轮事件?
function mousewheel()
{
origscale=root.currentScale;
origscale +=event.wheelDelta / 1200;
if (origscale > 0)
{
root.currentScale=origscale;
root.currentTranslate.x=midx*root.currentScale+event.offsetX*(1-root.currentScale/midscale);
root.currentTranslate.y=midy*root.currentScale+event.offsetY*(1-root.currentScale/midscale);
midscale=root.currentScale;
midx=root.currentTranslate.x/root.currentScale;
midy=root.currentTranslate.y/root.currentScale;
}
}