<td width="28%" align="right" nowrap >
我设置nowrap和不设置nowrap效果都一样。就是表格随着文字自动伸展,为什么?
→回答问题:
TD元素noWrap属性的行为与TD元素的width属性有关。
◆如果未设置TD宽度,则noWrap属性是起作用的。
◆如果设置了TD宽度,则noWrap属性是不起作用的。
http://www.blueidea.com/tech/web/2003/943.asp
table调整以下格式
<meta http-equiv="refresh" content="60"> 静态页面定时刷新语句
要有主键表示一条记录是唯一的(没有唯一的数据,自己要构建唯一的数据。例如:创建ID等等)。
TreeSet去除重复的内容。在构建数据结构时,理请数据之间的关系,再处理。
要有分解的思想:部分+部分=整体(尤其是拼写字符串时要考虑)
页面从request中取数据
<jsp:useBean id="allianceList" class="java.util.ArrayList" scope="request"></jsp:useBean>
<jsp:useBean id="prefCustMap" class="java.util.HashMap" scope="request"></jsp:useBean>
好的算法,是简洁的。思路要开阔些。设计算法之前要先画流程图,再写代码!
1 自己没有review代码
2 没有log输出
3 一定要等更新成功在执行下一步
4 尽可能的使用标签
设计方法时,一定要考虑如何处理异常
ObjectOutputStream只能对Serializable接口的类的对象进行序列化。默认情况下,ObjectOutputStream按照默认方式序列化,这种序列化方式仅仅对对象的非transient的实例变量进行序列化,
而不会序列化对象的transient的实例变量,也不会序列化静态变量。
在应用时,如果对某些成员变量都改为transient类型,将节省空间和时间,提高序列化的性能。20080805
程序其实都是对字符串的处理,对字符串的处理,要掌握好正则表达式 20080814
如何更好的组织数据,对于数据库中的数据就是一张二维表,可以用二维数组来表示。
其实,大部分的数据都可以组织成一维数组,或者二维数组,对于多维可以转成
一或者二维数组再进行处理 20080815
注意从页面前端的数据长度大于数据库中字段定义的长度的场合,两种方法解决:1 页面前端check长度 2 改数据库中字段的长度
20080815
注意截字符串(包含中文)问题,此时是按字符截,按字节截 20080815
学习优秀的算法和架构的的实现思想,并运用到实际工作中去 20080818
20080820
//email格式检查
function checkEmail(str){
var email = new RegExp("^//w+((-//w+)|(//.//w+))*//@[A-Za-z0-9]+((//.|-)[A-Za-z0-9]+)*//.[A-Za-z0-9]+$");
return(email.test(str));
}
//清除左空格
function ltrim(str){
return str.replace(/^/s*/, "");
}
//清除右空格
function rtrim(str){
return str.replace(//s*$/, "");
}
利用随机数,防止url重复
var url = "<%=request.getContextPath()%>/order/queryOrderByPnrOrName.do?random="+ Math.random( )
<img src="<%=request.getContextPath()%>/image/desk/none2.gif" width="683" height="135">
isNaN // js中判断是否为数字
设置textarea为readonly
<textarea rows="12" cols="100%" readonly="readonly" style="overflow-x:hidden;border:0;font-size:15px;"><%=request.getAttribute("iremark")==null?"":request.getAttribute("iremark")%></textarea>
20080828
<!-- querystaff从DeskGetPassengerInfoAction中(request.setAttribute("querystaff", queryform))获得数据 -->
<jsp:useBean id="querystaff" class="com.travelsky.agent.desk.form.DeskPassengerQueryForm" scope="request"></jsp:useBean>
20080902
<%@page isELIgnored="false"%> 表示不忽略el表达式,如果设定为真,那么JSP中的表达式被当成字符串处理
<c:out value="${pageContext.request.contextPath}"/> 与 <%=request.getContextPath()%>是一样的
20080903
struts中的action调用action的配置
例如:
<form-bean name="setiTermConfig" type="com.travelsky.agent.desk.form.SetiTermConfigForm"></form-bean>
<action name="setiTermConfig" path="/DesksetiTermConfig" scope="request" type="com.travelsky.agent.desk.action.SetiTermConfigAction">
<forward name="success" path="/jsp/desk/SetiTermConfig.jsp"></forward>
</action>
<action path="/habitCompanyCodeDetail" type="com.travelsky.agent.desk.action.HabitCompanyCodeDetailAction" parameter="action" scope="request" >
<forward name="sucess" path="/DesksetiTermConfig.do" redirect="true"/>
</action>
redirect="true" :true 表示重定向操作(不能共享request范围内的数据) false 表示执行转发操作(可以共享request范围内的数据)
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml, /WEB-INF/validator-rules-custom.xml, /WEB-INF/validation.xml"/>
</plug-in>
20080905
1 js中单引好不行,就用双引号
2 cropDbookRemark = "'"+escape(escape(cropDbookRemark))+"'";
function showRemark(cropBookRemark)
{
alert(unescape(unescape(cropBookRemark)));
}
20080909
在页面显示过程中,要考虑一些转义字符的问题
function querypsg(clientCode,passengerCode,tel,passengerName,cert,bp,ply){
var temp;
temp= '&clientCode=' + clientCode + '&passengerCode=' + passengerCode + '&tel=' + tel + '&passengerName=' + passengerName + '&cert=' + cert + '&bp=' + bp ;
ply = '/Nasmodel/DeskPsgToEterm.do?show=first'+ temp;
ply += "&random=" + Math.random();
alert(ply);
var windowProperty = "height="+screen.availheight+",width="+screen.availwidth+'resizable=yes,scrollbars=yes';
window.open(ply,'',windowProperty);
//,'toolbar=no,menubar=no,resizable=yes'
}
以上的方法,对于新打开的一个窗口,可以借鉴。用到随机数,每次提交是不同的请求
//email格式检查
function checkEmail(str){
var email = new RegExp("^//w+((-//w+)|(//.//w+))*//@[A-Za-z0-9]+((//.|-)[A-Za-z0-9]+)*//.[A-Za-z0-9]+$");
return(email.test(str));
}
20080923
设置了form,在页面中可以通过以下方式获得:
例如:
<script language="javascript">
function doSubmit()
{
// alert(document.forms['tempPassengerForm'].tempPassengerCode.value);
// document.forms['tempPassengerCode'].submit();
alert(document.tempPassengerForm.tempPassengerCode.value);
}
</script>
<html:form action="/DeskTempPassengerToEterm.do" name="tempPassengerForm" type="com.travelsky.agent.desk.form.DeskTempPassengerForm" scope="request">
<textarea rows="20" cols="105" name="tempPassengerCode"></textarea>
</html:form>
^ 和 $ 他们是分别用来匹配字符串的开始和结束
把指定几个字符放到小括号里,中括号只匹配一个单一的字符,大括号里面限制字符出现的个数
* 出现0次或者N次
+ 至少出现一次
? 没有或者出现一次
*,+,?只管它前面的字符
这就是完整的email认证匹配模式了
^[_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$
只能含有中英文、点、空格、中横线和单引号、数字(均为英文标点)
Java:^([/u4E00-/u9FA5]|[a-zA-Z0-9]|[. //-'])*$
Js: ^([/u4E00-/u9FA5]|[a-zA-Z0-9]|[. //-'])*$
20080925
1 解决js输出乱码的问题:
1)把JS从eclipse中copy出来到记事本中,然后存成utf-8编码格式
2)在eclipse中新建一个js文件,把该文件编码格式改成utf-8编码格式
注意的是:html中的编码格式要与js中的编码格式保持一致。
20080927
1 往页面传输的数据量很大时,可以采用ajax技术提高页面传输效率,用什么传什么
typeof(parent.tabPage2)!="undefined"
20081007
1 设置table width 时要一致,要都用百分号,或者都用px,要保持一致
2
以下显示单,双引号的输出:
<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
function showInfo()
{
<%
String s="/'小王/'";
String s1="/"你好/"";
String say = StringEscapeUtils.escapeJavaScript(s+"说:"+s1);
System.out.println(s+"说:"+s1);
%>
alert('<%=say%>');
}
注意:以下方式显示出错误:
<br>
<br>
<%
String a = "/'小王/'";
String b = "/"你好/"";
String c = StringEscapeUtils.escapeJavaScript(a+"说:"+b);
%>
<a href="javascript:alert('<%=c %>')">show</a>
通过参数传入显示出错误
20081009
1 页面上的单双引号的显示为转义
2 由于网络环境的问题,要防止重复提交的问题
20081013
c:set target="${historyCodeVO}" value="${codeHistory.airLines}" property="airLines"/>
<%
if("".equals(historyCodeVO.getAirLines()))
{
out.print("无");
}
else
{
out.print(historyCodeVO.getAirLines());
}
%>
20081014
Java种设置显示时间:
常见标准的写法"yyyy-MM-dd HH:mm:ss",注意大小写,时间是24小时制,24小时制转换成12小时制只需将HH改成hh,不需要另外的函数。
20081015
1 使用测试数据时,尽可能的要测第一条数据,二,倒数第二 最后一条数据
2 js中定义对象时,要放到文件的头部
20081017
1 如果用AJAX网络反应缓慢,可以提示用户操作进行中...
20081023
1 从textarea,split数据每一行要/r/n
2 写测试数据的时候,要考虑数据不全的情况,尤其是由用户输入的数据
20081024
1 对于抽取出来的js文件,如果调用某个方法时发生错误,将该方法提到文件头部
2
定义和用法:
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
语法:
setTimeout(code,millisec)
参数:
code (必需):要调用的函数后要执行的 JavaScript 代码串。
millisec(必需):在执行代码前需等待的毫秒数。
提示:
setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。
实例:
<html>
<head>
<script type="text/javascript">
function timedMsg()
{
var t=setTimeout("alert('5 seconds!')",5000)
}
</script>
</head>
<body>
<form>
<input type="button" value="Display timed alertbox!"
onClick="timedMsg()">
</form>
<p>Click on the button above. An alert box will be
displayed after 5 seconds.</p>
</body>
</html>
20081027
评估某一个人的能力:一个人的能力尽可能的要数量化,数值化
1 装oracle的服务器端或者客户端组件,后应该配置 Net Manager
选择“本地”-〉“服务命名”-〉“创建一个新的服务命名”见下图所示:
输入数据库服务器IP地址或者主机名 |
数据库服务名称 |
或者修改C:/oracle/ora92/network/ADMIN下的tnsnames.ora文件
# TNSNAMES.ORA Network Configuration File: C:/oracle/ora92/NETWORK/ADMIN/tnsnames.ora
# Generated by Oracle configuration tools.
BlueSky02 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.183.89)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = vio)
)
)
2008-10-30
写测试case时,要考虑数据库中字段最大长度的情况。例如数据库中名字字段长度为130个字节,就要输入三条数据:等于130个字节,输入大于130个字节,小于130个字节
2008-10-31
<action path="/fareCreator"
parameter="/jsp/fare/Creator_query.jsp" scope="request"
type="org.apache.struts.actions.ForwardAction" />
2008-11-11
观察数据结构的规律,找到规律或者是业务规则,并用程序优美简洁的表达出来
2008-11-17
eval()函数(javascript) - [javaScript]
eval()函数
JavaScript有许多小窍门来使编程更加容易。
其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。
举个小例子:
var the_unevaled_answer = "2 + 3";
var the_evaled_answer = eval("2 + 3");
alert("the un-evaled answer is " + the_unevaled_answer + " and the evaled answer is " + the_evaled_answer);
如果你运行这段eval程序, 你将会看到在JavaScript里字符串"2 + 3"实际上被执行了。
所以当你把the_evaled_answer的值设成 eval("2 + 3")时, JavaScript将会明白并把2和3的和返回给the_evaled_answer。
这个看起来似乎有点傻,其实可以做出很有趣的事。比如使用eval你可以根据用户的输入直接创建函数。
这可以使程序根据时间或用户输入的不同而使程序本身发生变化,通过举一反三,你可以获得惊人的效果。
在实际中,eval很少被用到,但也许你见过有人使用eval来获取难以索引的对象。
文档对象模型(DOM)的问题之一是:有时你要获取你要求的对象简直就是痛苦。
例如,这里有一个函数询问用户要变换哪个图象:变换哪个图象你可以用下面这个函数:
function swapOne()
{
var the_image = prompt("change parrot or cheese","");
var the_image_object;
if (the_image == "parrot")
{
the_image_object = window.document.parrot;
}
else
{
the_image_object = window.document.cheese;
}
the_image_object.src = "ant.gif";
}
连同这些image标记:
[img src="stuff3a/parrot.gif" name="parrot"]
[img src="stuff3a/cheese.gif" name="cheese"]
请注意象这样的几行语句:
the_image_object = window.document.parrot;
它把一个图象对象敷给了一个变量。虽然看起来有点儿奇怪,它在语法上却毫无问题。
但当你有100个而不是两个图象时怎么办?你只好写上一大堆的 if-then-else语句,要是能象这样就好了:
function swapTwo()
{
var the_image = prompt("change parrot or cheese","");
window.document.the_image.src = "ant.gif";
}
不幸的是, JavaScript将会寻找名字叫 the_image而不是你所希望的"cheese"或者"parrot"的图象,
于是你得到了错误信息:”没听说过一个名为the_image的对象”。
还好,eval能够帮你得到你想要的对象。
function simpleSwap()
{
var the_image = prompt("change parrot or cheese","");
var the_image_name = "window.document." + the_image;
var the_image_object = eval(the_image_name);
the_image_object.src = "ant.gif";
}
如果用户在提示框里填入"parrot",在第二行里创建了一个字符串即window.document.parrot. 然后包含了eval的第三
行意思是: "给我对象window.document.parrot" - 也就是你要的那个图象对象。一旦你获取了这个图象对象,你可以把
它的src属性设为ant.gif. 有点害怕?用不着。其实这相当有用,人们也经常使用它。
<html>
<body>
<script type="text/javascript">
eval("x=10;y=20;document.write(x*y)");// output: 200
document.write("<br />");
document.write(eval("2+2"));// output: 4
document.write("<br />");
var x=10;
document.write(eval(x+17)); // output: 27
document.write("<br />");
eval("alert('Hello world')"); // output: “Hello world”
</script>
</body>
</html>
使用 JSON(即 JavaScript Object Notation),将以一种特定的字符串形式来表示 JavaScript 对象。如果将具有这样一种形式的字符串赋给任意一个 JavaScript 变量,该变量随后将引用一个通过指定给该变量的字符串构建的对象。
如果将此字符串赋给任意一个 JavaScript 变量,则该变量将接受以这种对象为单位的数据。要访问数据,请提供需要访问的属性所在的路径。
String json = "{/"name/":/"reiz/"}";
JSONObject jsonObj = new JSONObject(json);
String name = jsonObj.getString("name");
var str = '{ "name": "Jason", "occupation": "character","sex":"Male" }';
//alert(str);
// eval("result = "+str);
// 通过eval函数把字符串str,转换成result对象(JavaScript 对象)
var result = eval('(' + str + ')');
alert(result);
alert("name "+result.name); // output: “Jason”
alert("occupation "+result.occupation); // output: “character”
alert("sex "+result.sex); // output: “Male”
在json数据格式中
person是一个数组,而每一个数组元素又是一个对象
{"person":
[
{"sex":"M","price":"{/"TV/":/"200.63/",/"Computer/":/"15000.77/"}","address":"{/"street/":/"BackStreet/",/"number/":12345}","name":"JJ","Id":"1"},
{"sex":"M","price":"{}","address":"{/"street/":/"BackStreet2/",/"number/":123452}","name":"小杰:金杰","Id":"2"},
{"sex":"F","price":"{}","address":"{/"street/":/"后街3:后街33.后街34,后街35/",/"number/":123453}","name":"JJ3","Id":"3"}
]
}
2008-11-19
Js中得到字节的长度,匹配16进制从00到ff的字节(中文两个字节表示一个汉字)
function getCharLength(str){
if(str){
return str.replace(/[^/x00-/xff]/gi,'pi').length;
}else{
return 0;
}
}
2008-12-2
Hibernate 工作原理图
Hibernate 工作原理图
启动Hibernate
构建Configuration实例,初始化该实例中的所有变量 Configuration cfg = new Configuration().configure();
加载hibernate.cfg.xml文件至该实例内存
通过hibernate.xfg.xml文件中的mapping节点配置,加载hbm.xml文件至该实例内存
利用上面创建的Configuration实例构建一个SessionFactory实例 SessionFactory sf = cfg.buildSessionFactory();
由上面得到的SessionFactory实例创建连接 Session s = sf.openSession();
由上面得到的Session实例创建事务操作接口Transaction的一个实例tx Transaction tx = s.beginTransaction();
通过Session接口提供的各种方法操作数据库的访问
提交数据库的操作结果 tx.commit();
关闭Session链接 s.close();
2008-12-12
在写测试case时,一定要多考虑边界值得问题。例如:在输出指令第22行需要跨行的场合(某条指令不能跨行),要考虑输出的指令在第21和22行的情况,就要写六条case:
第一条case:在第21行是指令是指令开始的部分
第二条case:在第21行是指令是指令中间的部分
第三条case:在第21行是指令是指令结束的部分
第四条case:在第22行是指令是指令开始的部分
第五条case:在第22行是指令是指令中间的部分
第六条case:在第22行是指令是指令结束的部分
还要测试一下循环结束条件
2008-12-22
对于前端来说由于浏览器之间的差异(IE有自己的事件模型,DOM也有自己的事件模型,两者之间存在差异),以及对于W3C HtmlDOM支持的程度的水平
要写出安全性好,跨浏览器的前端程序来说,是一种挑战。
2008-12-23
对于后端来说,要尽可能编写可测试强,耦合性低的代码
2008-12-24
对于未验证的ActiveX控件,要把本地IP加入到可信站点中(只针对第一次加载)
2009-1-4
对于用Js生成的控件,生成的id值,要写成如下的方式:
var trainId = 0;// 设置为全局变量
var tbl = document.getElementById('trainTable');
var tb = tbl.insertRow(tbl.rows.length);
tb.id = trainId;
trainId++;
a.innerHTML = '<input name="trainService['+tb.id+'].departtime" id="d1'+tb.id+'" maxlength="15" value="'+value0+'" type="text" size="9"/> <img src="<html:rewrite page="/image/common/icon_03.gif"/>" id=i'+tb.id+' οnclick="calendar(i'+tb.id+',d1'+tb.id+')">';
l.innerHTML = '<a href=javascript:del('+tb.id+',/"trainTable/")>删除</a>';
2009-1-7
对于系统权限的设计,可以采用如下设计思路:
1 设计功能模块表:
包括:funcitionID,pfunctionID,functionName, FUNCTYPE ,fuctionPath字段
funcitionID | pfunctionID | FUNCTYPE | functionNam | fuctionPath |
0 | 0 | 0001 |
| # |
1 | 0 | 1001 | 新闻 | New.do |
2 | 0 | 1001 | 论坛 | Bbs.do |
3 | 1 | 0001 | 国内新闻 | # |
4 | 1 | 0001 | 国际新闻 | # |
5 | 2 | 0001 | 经济论坛 | # |
6 | 5 | 0001 | 金融危机 | # |
通过pfunctionID来表示它所对应得父级菜单,
FUNCTYPE:0001 菜单没有连接 1001 菜单具有连接
2 设计角色表
Roleid | Rolename |
1 | Role1 |
2 | Role2 |
3 设计角色详细表(就是纽带表)
Roleid | FUNCID |
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
2 | 1 |
4 功能模块表,设计角色表,角色详细表 三个表关联起来
2009-1-15
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
标签的参考
fn:contains(string, substring)
如果参数string中包含参数substring,返回true
fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true
fn:endsWith(string, suffix)
如果参数 string 以参数suffix结尾,返回true
fn:escapeXml(string)
将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回
fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置
fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。
fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果
fn:split(string, separator)
返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素
fn:startsWith(string, prefix)
如果参数string以参数prefix开头,返回true
fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符
fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串
fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串
fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回
fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回
fn:trim(string)
去除参数string 首尾的空格,并将其返回
2009-1-22
1外部引用的Js文件的编码格式要与页面的编码格式保持一致
2 一定要考虑为空的情况
2009-2-2
冒烟测试的对象是每一个新编译的需要正式测试的软件版本,
目的是确认软件基本功能正常,可以进行后续的正式测试工作。
例如是否可以正确安装/卸载,主要功能是否实现,
是否存在严重死机或数据严重丢失等Bug。如果通过了该测试,
则可以根据正式测试文档进行正式测试。
否则,就需要重新编译版本,再次执行版本可接收确认测试,直到成功。
冒烟测试的说法据说是:
就象生产汽车一样,汽车生产出来以后,首先发动汽车,看汽车能否冒烟,如果能,证明汽车最起码可以开动了。说明完成了最基本的功能。
冒烟测试一般用于每日构建(Nightly build),构建服务器首先从CVS服务器上,下载最新的源代码,然后编译单元测试,运行单元测试通过后,编译可执行文件,可执行文件若可运行,并能执行最基本的功能,则认为通过了冒烟测试,这时,构建服务器会把程序打包成安装文件,然后上传到内部网站,第二天一早,测试人员来了以后,会收到构建服务器发来的邮件提示昨晚是否构建成功。若构建成功,则测试人员进行相关的功能测试。所有这些功能的完成,一般是靠编写脚本完成的,目前比较常用的脚本有TCL,Perl,Python及功能弱弱的批处理。用这些可以完成系统的每日构建。
简单的说,就是先保证系统能跑的起来,不至于让测试工作做到一半突然出现错误导致业务中断。目的就是先通过最基本的测试,如果最基本的测试都有问题,就直接打回开发部了,减少测试部门时间的浪费。
2009-2-3
将常用的js提取出来有如下的好处:
1 多个WEB页面重复使用
2 不仅可以改善代码的维护性,而且使该脚本文件保留在浏览器的缓存中,从而只需要在用户访问站点时向本地下载一次。
2009-2-17
javascript 有三部分组成
1 javascript核心(ECMAScript)
2 文档对象模型(DOM)
3 浏览器对象模型(BOM)
2009-2-18
<img src="<html:rewrite page="/image/common/icon_03.gif"/>" id=i3 οnclick="calendar(i3,f2)" align="absmiddle">
AbsMiddle 图像的中间与同一行中最大元素的中间对齐
AbsBottom 图像的下边缘与同一行中最大元素的下边缘对齐
AbsMiddle 图像的中间与同一行中最大元素的中间对齐
Baseline 图像的下边缘与第一行文本的下边缘对齐
Bottom 图像的下边缘与第一行文本的下边缘对齐
Left 图像沿网页的左边缘对齐,文字在图像右边换行
Middle图像的中间与第一行文本的下边缘对齐
NotSet未设定对齐方式
Right图像沿网页的右边缘对齐,文字在图像左边换行
Top图像的上边缘与同一行上最高元素的上边缘对齐
TextTop图像的上边缘与同一行上最高文本的上边缘对齐
2009-2-20
<META name="Keywords"
content="Reservation,CRS,GDS,Travel,Agent,Portal,APS,订座,机票,查询,终端,民航">
<META name="Description"
content="APS(Agent Portal System) is a brand new work place for travel agent to book flight.APS是全新的代理人工作平台,可以使用终端指令或图形化工具实时查询座位情况并订票。">
以上代码有利于搜索引擎的匹配
2009-2-23
1对于非法登陆,可以采用标签或者Filter过滤器的方法,来进行验证
2在写客户端的脚本时,要考虑客户端屏幕尺寸和分辨率的情况
2009-2-24
style="word-break:break-all;" 加入表格中是强制换行
可以用CSS样式控制
对于div,p等块级元素
正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义的宽度之后自动换行
html
<div id="wrap">正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义</div>
css
#wrap{white-space:normal; width:200px; }
1.(IE浏览器)连续的英文字符和阿拉伯数字,使用word-wrap : break-word ;或者word-break:break-all;实现强制断行
#wrap{word-break:break-all; width:200px;}
或者
#wrap{word-wrap:break-word; width:200px;}
<div id="wrap">abcdefghijklmnabcdefghijklmnabcdefghijklmn111111111</div>
效果:可以实现换行
2.(Firefox浏览器)连续的英文字符和阿拉伯数字的断行,Firefox的所有版本的没有解决这个问题,我们只有让超出边界的字符隐藏或者,给容器添加滚动条
#wrap{word-break:break-all; width:200px; overflow:auto;}
<div id="wrap">abcdefghijklmnabcdefghijklmnabcdefghijklmn111111111</div>
效果:容器正常,内容隐藏
对于table
1. (IE浏览器)使用 table-layout:fixed;强制table的宽度,多余内容隐藏
<table style="table-layout:fixed" width="200">
<tr>
<td>abcdefghigklmnopqrstuvwxyz1234567890ssssssssssssss
</td>
</tr>
</table>
效果:隐藏多余内容
2.(IE浏览器)使用 table-layout:fixed;强制table的宽度,内层td,th采用word-break : break-all;或者word-wrap : break-word ;换行
<table width="200" style="table-layout:fixed;">
<tr>
<td width="25%" style="word-break : break-all; ">abcdefghigklmnopqrstuvwxyz 1234567890
</td>
<td style="word-wrap : break-word ;">abcdefghigklmnopqrstuvwxyz 1234567890
</td>
</tr>
</table>
效果:可以换行
3. (IE浏览器)在td,th中嵌套div,p等采用上面提到的div,p的换行方法
4.(Firefox浏览器)使用 table-layout:fixed;强制table的宽度,内层td,th采用word-break : break-all;或者word-wrap : break-word ;换行,使用overflow:hidden;隐藏超出内容,这里overflow:auto;无法起作用
<table style="table-layout:fixed" width="200">
<tr>
<td width="25%" style="word-break : break-all; overflow:hidden; ">abcdefghigklmnopqrstuvwxyz1234567890</td>
<td width="75%" style="word-wrap : break-word; overflow:hidden; ">abcdefghigklmnopqrstuvwxyz1234567890</td>
</tr>
</table>
2009-3-2
使用hibernate的query=session.createQuery("select count(*) from CpUser where id = :id and password = :password");
query.setParameter("id".userForm.getId());
能防止sql注入
2009-3-3
在eclipse中jsp页面也是可以设置断点,debug
2009-3-18
用js验证电话号码的正则表达式
*/
/d 代表一个数字
/d{7,8} 代表7-8位数字(表示电话号码)
/d{3,} 代表分机号码
0/d{2,3} 代表区号
[0/+]/d{2,3} 代表国际区号
*/
/^(([0/+]/d{2,3}-)?(0/d{2,3})-)?(/d{7,8})(-(/d{3,}))?$/
([0/+]/d{2,3}-)?
[0/+]表示可以出现0或者加号,/这个右斜杠表示转义后面的加号
/d{2,3}表示0(+)后面必须为2到3位数字
([0/+]/d{2,3}-)? 不出现或者出现一次
(0/d{2,3})- 表示区号0后面必须为2到3位数字
(([0/+]/d{2,3}-)?(0/d{2,3})-)? 不出现或者出现一次
(/d{7,8}) 表示必须为7到8位数字
(/d{3,}) 表示必须有3位数字
(-(/d{3,}))?不出现或者出现一次
2009-3-26
根据ordSale.scopeflag(在form中的属性)属性的值,struts标签自动匹配option中的selected
<html:select property="ordSale.scopeflag">
<html:option value="0">国内</html:option>
<html:option value="1">国际</html:option>
</html:select>
如果ordSale.scopeflag为null 则安之option中的顺序进行显示,例如:ordSale.scopeflag=null 标签显示的顺序为:
<html:select property="ordSale.scopeflag">
<html:option value="1">国际</html:option>
<html:option value="0">国内</html:option>
</html:select>
则在页面上显示option为先是国际,再为国内,这种应用的场合为:
例如:范围:下拉框有国内、国际。无值时,默认显示为国际。
2009-4-8
浏览器是加载页面的过程
1 页面的dom加载,按照源文档里的顺序创建元素:<html>节点,<head>节点,以及有时会有的<script>节点,<script>节点立即加载并处理其中的脚本
由于这个时候页面的body还没有被加载,一定要记住不要在页面元素上注册事件监听器。必须等待这个场景中的第二步,最坏情况下是第三步
2 DOM被完全加载;所有的文档描述的元素在内存中被创建。额外的资源还没有被加载(比如图像,CSS文件,嵌入对象),但是它们的DOM元素已经存在了。从这时候起,可以在它们上面注册事件监听器了。Prototype1.6引入了一个标准化的DOMContentLoaded事件(最初是Mozilla的自定义事件),可以在这个时候做一些响应。只需要在document对象上使用自定义的dom:loaded事件。
3 页面被完全加载;所有的内部资源都被加载并处理。这时load事件在window对象上触发。如果页面有很多外部资源,那么它会在页面初始绘制很长时间之后发生…
第一阶段就可以有事件开始发生(但是它们不是用户相关的事件,用户相关的事件大多数在第二阶段开始)。只要事件发生,相关的监听器就会被通知,并且这里有一个描述当前事件所有信息的事件对象。
2009-4-21
1 页面被完全加载后(所有的内部资源都被加载并处理),才执行window.onload事件
2 标准的load事件,作用在window对象上,触发的比较晚,要等到页面中所有的资源,包括样式单,图像,Flash动画和脚本都被装载以后再触发。为了快速地对DOM作出反应,只要等待DOM被加载(它相当快),使用文档上自定义的dom:loaded事件即可。
!=与== vs. !==与===
开发者易犯的一个常见的错误是对JavaScript中false值的缺乏理解。在JavaScript里,null,0,"",false,和undefined全部彼此相等(==),因为它们的计算值都为false。这意味着如果你使用代码test==false,则它在test为undefined或null时,也会得到结果true,这可能并非你所期望的。
这正是!==和===有用的地方。这两个操作符都将检查变量的精确值(比如null),而不是单看其计算值(如false)。JSLint要求你任何时候你使用==和!=进行真假判断时,都必须用!==或===替代。
!=与!==区别于!==和===的示例
//这两个都为true
null == false
0 == undefined
//你应该以!==和===取代之
null !== false
false === false
2009-4-28
解决tomcat乱码问题,可以修改tomcat/conf/server.xml中的
port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="GBK"/>
URIEncoding设置编码字符集
2009-5-5
以下是用prototype来获得checkbox和radio选中的值
var myPnr=[];
$$('input[type="checkbox"][name="checkPnr"]').select(function(i){return i.checked}).each(function(i){myPnr.push(i.value)});
$$('input[type="radio"][name="bank"]').select(function(i){return i.checked}).each(function(i){alert(i.value)});
40 个轻量级 JavaScript 库 (上)
http://www.javaeye.com/news/6107-40-lightweight-javascript-library-on
50个实用的JavaScript工具
http://www.javaeye.com/news/5846-50-practical-javascript-tools