#
类代码: /************************* * * Class:CheckItem * 2009.08.23 **************************/ //-- Contructor function CheckItem(textboxName,msg,validChar,isRequired){ this.textboxName=textboxName; this.msg=msg; this.validChar=validChar; this.isRequired=isRequired; }
/************************* * * Class:FormChecker * 2009.08.23 **************************/ //-- Contructor function FormChecker(){ this.checkItemArray=new Array; }
//-- Add a check Item to array FormChecker.prototype.addCheckItem=function(textboxName,msg,validChar,isRequired){ var checkItem=new CheckItem(textboxName,msg,validChar,isRequired); this.checkItemArray[this.checkItemArray.length]=checkItem; }
//-- Check text field in the form FormChecker.prototype.checkTextBox=function(checkItem){ var validChar=checkItem.validChar; var isRequired=checkItem.isRequired; var inputValue=$(checkItem.textboxName).value; if(isRequired!="true" && inputValue.length<1){ return true; } else{ var regexStr="^"+validChar+"$"; var regex=new RegExp(regexStr); return regex.test(inputValue); } }
//-- judge the validation of a form FormChecker.prototype.isValid=function(){ for(var i=0;i<this.checkItemArray.length;i++){ var toBeCheckedObj=this.checkItemArray[i]; var checkResult=this.checkTextBox(toBeCheckedObj); if(checkResult==true){ continue; } else{ alert(toBeCheckedObj.msg); $(toBeCheckedObj.textboxName).focus(); return false; } }
return true; }
页面代码:
/***************************************************** * 窗口载入时调用的启动函数 *****************************************************/ var formChecker; window.onload=function(){ // 设置主菜单的当前菜单项 setMainmenuCurrentItem(0); // 设置侧边菜单的当前菜单项 setSidemenuCurrentItemByText("合同起草"); // 取得合同类别的数据 // 填充下拉列表框数据 new TypeListbox("contractTypeFirst","0","contractTypeSecond",""); new TypeListbox("contractTypeSecond",$("contractTypeFirst").value,"contractTypeThird",""); // var today=getToday(); // $("createTime").value=today; // 屏蔽了合同起草时间,故这里也屏蔽。何杨,2011年5月6日9:20:34 // $("maintenanceEndTime").value=today; // 初始化检查项 formChecker=new FormChecker(); formChecker.addCheckItem("contractName","请输入一到一百位的合同名",".{1,100}","true"); formChecker.addCheckItem("contractTypeThird","请点击下拉列表框依次选择合同类别",".{1,100}","true"); formChecker.addCheckItem("contractAmount","请输入数字形式的合同总金额(金额限制百亿内)","([0-9]{1})(\\d{0,9})","true"); formChecker.addCheckItem("vendorName","请点击右边图标选择合同对方名称。",".{1,}","true"); formChecker.addCheckItem("fulfillCycle","请输入数字形式的合同履行期限,以月为单位(最多十位数字)","([1-9]{1})(\\d{0,9})","true"); formChecker.addCheckItem("maintenanceStartTime","请点击右边的按钮选择模板选择维保起始日期","(\\d{4})-(\\d{1,2})-(\\d{1,2})","false"); formChecker.addCheckItem("maintenanceEndTime","请点击右边的按钮选择模板选择维保结束日期","(\\d{4})-(\\d{1,2})-(\\d{1,2})","false"); formChecker.addCheckItem("contractBriefFile","请输入零到五百字的合同所属项目概况或依据的文件",".{1,500}","false"); formChecker.addCheckItem("contractDecision","请输入零到一千字的项目决策过程",".{1,1000}","false"); formChecker.addCheckItem("remark","请输入零到两百五十个字的补充说明",".{1,250}","false"); formChecker.addCheckItem("maintenanceDescription","请输入零到一千个字的维保描述",".{1,1000}","false"); }
/********************************************************************* * 得到表单的检查结果 * 何杨,2011-4-17 14:31:40 *********************************************************************/ function getCheckResult(){ // 进行页面输入检查 if(formChecker.isValid()==false){ return false; } // 维保起始日期 var maintenanceStartTime=$("maintenanceStartTime").value; // 维保结束日期 var maintenanceEndTime=$("maintenanceEndTime").value; // 维保起始日期和维保结束日期做比较 if(isNotEmptyString(maintenanceStartTime)==true && isNotEmptyString(maintenanceEndTime)==true){ if(isReasonable(maintenanceStartTime,maintenanceEndTime)==false){ alert("维保结束日期必须晚于维保起始日期."); $("maintenanceEndTime").focus(); return false; } } return true; }
js类代码:
/*************************************
*
* Class:ContractTypeListboxOne
* 2011-5-18 20:08:00
**************************************/
//-- 构造函数
function TypeListbox(id,parentId,nextId,nextParentId){
this.id=id;
this.parentId=parentId;
this.nextId=nextId;
this.nextParentId=nextParentId;
this.init();
this.fillData($(this.id),parentId);
}

//-- 初始化
TypeListbox.prototype.init=function(){
var ctrl=$(this.id);
var me=this;
ctrl.onchange=function(){
me.changeEvent();
}
}

//-- 变化事件
TypeListbox.prototype.changeEvent=function(){
var ctrl=$(this.id);
if(this.nextId.length>0 && this.nextId!="none"){
this.fillData($(this.nextId),ctrl.value);
}
}

//-- 填充数据
TypeListbox.prototype.fillData=function(myListbox,parentId){
/*if(parentId.length<1 || parentId=="none"){
return;
}*/

var url=encodeURI('GetContractType.do?parentId='+parentId);
url=encodeURI(url);
new Ajax.Request(url,{
method:'get',
onSuccess: function(ajaxObj){
// alert(ajaxObj.responseText);
var status=ajaxObj.responseXML.getElementsByTagName("status")[0].firstChild.data;
if(status=="ok"){
// 返回正确信息

// 找到所有节点放入数组,为避免麻烦,节点名统一都设置成node比较好,不用实例变了,这里就要改变一次。
var arr=ajaxObj.responseXML.getElementsByTagName("node");
var length=arr.length;

for(var i=myListbox.options.length-1;i>=0;i--){
myListbox.remove(i);
}
var newOption=new Option;
newOption.value="";
newOption.text="--请选择--";
myListbox.add(newOption);

if(length>0){
// 遍历这个数组
for(var i=0;i<length;i++){
var node=arr[i];
var id=node.getElementsByTagName("id")[0].firstChild.data;
var name=node.getElementsByTagName("name")[0].firstChild.data;
var newOption=new Option;
newOption.value=id;
newOption.text=name;
myListbox.add(newOption);
}
}
myListbox.selectedIndex=0;
myListbox.fireEvent("onchange");
}
else{
// 返回错误信息
var text=ajaxObj.responseXML.getElementsByTagName("text")[0].firstChild.data;
alert(text);
}
},
onFailure: function(){
alert("无法取得服务器的响应");
}
}
);
}页面下拉列表框:
< tr>
<td width="100%" colspan="10">
<div class="inputText">
<label for="classOneCbo">合同类别:</label>
<select id="classOneCbo">
<option value="" selected>--请选择--</option>
</select>
<font color="#003366">-</font>
<select id="classTwoCbo">
<option value="" selected>--请选择--</option>
</select>
<font color="#003366">-</font>
<select id="classThreeCbo">
<option value="" selected>--请选择--</option>
</select>
</div>
</td>
</tr>页面JS初始化代码:
/*****************************************************
* 窗口载入时调用的启动函数
* 何杨,2011年4月22日16:59:16
*****************************************************/
window.onload= function(){
// 设置主菜单的当前菜单项
setMainmenuCurrentItem(0);
// 设置侧边菜单的当前菜单项
setSidemenuCurrentItemByText("待办事项");
// 填充下拉列表框数据
new TypeListbox("classOneCbo","0","classTwoCbo","");
new TypeListbox("classTwoCbo",$("classOneCbo").value,"classThreeCbo","");
// 开始检索初始数据
search(0);
}
<html>
<head>
<title>test</title>
</head>
<body>
<select id="mySelect">
<option value="1">地球</option>
<option value="2">火星</option>
<option value="3">木卫二</option>
<option value="4">冥王星</option>
<option value="5">参宿四</option>
<option value="6">人马座</option>
</select>
</body>
</html>

 <script language="javascript">
<!--
 window.onload=function() {
var listBox=new ListBox("mySelect");
}

 function $(id) {
return document.getElementById(id);
}

//-- 类构造函数
 function ListBox(id) {
this.id=id;
this.init();
}
//--类的初始化函数,将控件的onchange事件交给类的changeEvent事件处理
 ListBox.prototype.init=function() {
var ctrl=$(this.id);
var me=this;
 ctrl.onchange=function() {
me.changeEvent();
}
}
// onchange事件产生时弹出下拉列表控件的值
 ListBox.prototype.changeEvent=function() {
var ctrl=$(this.id);
alert(ctrl.value);
}
//-->
</script>
一般来说,出现这种异常是因为传递给远程方法的参数不能实例化所致,比如有一个参数是复合类型,里面包括Calendar,Date,BigDecimal等形式的数据,需要把这些非基本类型的数据new出来赋值,然后再调用就好办了。基本类型和String等数据则不用理会。
Table.stock tr{
onmouseover : expression(onmouseover=function (){this.style.backgroundColor ='#b3ddfb'});
onmouseout : expression(onmouseout=function () {this.style.backgroundColor =''});
}
一.以目录形式打开某个较深不易记忆的目录。
explorer path
例子:explorer C:\Program Files\IBM\SDP70\runtimes\base_v61\profiles\AppSrv01\logs\server1
二.控制台方式进入某个目录。
在此目录下建一个bat文件,里面只写cmd三个字。然后创建快捷方式到桌面就可以了。
将程序从一个容器换到另一个容器,总会有各种意料之外的困难需要解决,近日本人需要将一个Web工程从Tomcat环境转移到WebSphere环境,经历了一番周折,特地将此经过记录下来,也许它能对将要进行如此经历的人其一点帮助作用,另外在此也向网络同仁和工作中的同事表示感谢。
原环境:
程序:SSH
容器:Tomcat6.0
数据库:MySql5
新环境:
程序:SSH
容器:WebSphere6.1
数据库:Oracle10g
移植过程中的第一个困难,是WebSphere不认识Web.xml中的Struts taglib.原文字(适用于Tomcat)如下:
<!-- Struts的TLDS -->
<taglib>
<taglib-uri>/WEB-INF/tld/app.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/app.tld</taglib-location>
</taglib>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/WEB-INF/tld/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
</taglib>
这个问题因为之前有所准备,在网络上找到了答案,将上述文字包在<jsp-config>节点中即可,修改后(对Tomcat和WebSphere均适用)的文字如下:
<!-- Struts的TLDS -->
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/tld/app.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/app.tld</taglib-location>
</taglib>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/WEB-INF/tld/struts-bean.tld</taglib-uri>
<taglib-location>
/WEB-INF/tld/struts-bean.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-html.tld</taglib-uri>
<taglib-location>
/WEB-INF/tld/struts-html.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-logic.tld</taglib-uri>
<taglib-location>
/WEB-INF/tld/struts-logic.tld
</taglib-location>
</taglib>
</jsp-config>
如此处理后,首页显示出来了,随即翻页遇到了问题,在IE中是翻页出现404错误,在FF中好一点,它告诉我WebSphere无法解析struts配置文件struts-config.xml。
起初我以为是中文问题,删除struts-config.xml中所有中文注释问题依旧,接下来在网络中寻找,还真有和我遇到一样问题的难友,但没人提出解决方案,正在挠头之际,我们的PM忽然说是否JDK不一致,检查一下,本机用的是1.6,而WebSphere自带1.5的,将本机也调成1.5后,问题解决! 真是只有咒语能解开咒语。
再下来,在表单提交时遇到了乱码问题,这是因为之前听信网络意见,将Web.xml中的filter都去掉了,结果自然乱码。此时感觉网络传闻未必可信,于是将filter又重新加上,乱码没有了。看来不经亲自尝试而盲从网络传闻是要吃亏的。
再下来,程序要访问数据库了,于是在WebSphere6.1中设置了数据源,再在Spring配置文件中进行了设置,如下:
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
value="java:comp/env/jdbc/*******DS">
</property>
</bean>
这样写在Tomcat中好用,在WebSphere不好用,正在挠头之际,PM告我别的项目有同样的写法,于是一看,java:comp/env/这部分是不需要的,直接把数据源JNDI名写在Value中就可以了。
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
value="jdbc/*******DS">
</property>
</bean>
其它数据库移植的问题就交给了Hibernate。至此问题全部解决。
事后来看,WebSphere6.1对中文,SSH的支持还是很好的,只是有些特定的地方和传统的Tomcat中的项目不太一样,注意一下就好了,未必有想象中的困难。遇到困难时,向有同样经历的人请教比自己在网络上搜寻要快很多。
摘要:
第一部分:页面中JavaScript的写法:
function isSoleContractName(contractNameTextBox){
var&nb... 阅读全文
|