mybatis里面汉字注释引起的异常及解决方法
在MyBatis的SQL配置文件里面,如果注释内容是单数个汉字,且以汉字结尾,并且注释边界两边没有空格,则会出现异常。
一下内容,来自:(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/200878/132260.html
最近在使用Ibatis组件进行一个项目开发,在运行时发现提示如下错误信息:
type 异常报告
消息
描述服务器遇到一个内部错误 (), 无法完成此请求。
异常
javax.servlet.ServletException: java.lang.ExceptionInInitializerError
根本原因
java.lang.ExceptionInInitializerError
根本原因
java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath ‘/sqlMapConfig/sqlMap’. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The string “–” is not permitted within comments.
根本原因
com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath ‘/sqlMapConfig/sqlMap’. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The string “–” is not permitted within comments.
根本原因
java.lang.RuntimeException: Error parsing XPath ‘/sqlMapConfig/sqlMap’. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The string “–” is not permitted within comments.
根本原因
com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The string “–” is not permitted within comments.
根本原因
org.xml.sax.SAXParseException: The string “–” is not permitted within comments. -----------------------------------------------------从错误描述来看发现是XML文件中的注释引起的异常,去掉配置文件中的中文注释或改用英文描述则可以通过后来发现是配置文件中采用:单数个中文或字母后跟单数个中文再用“–>”结束注释(中文后不加空格) 如:<!– 单数个中文–>、<!– a单数个中文–> 时就会报此异常争对此异常可以采用在左右边界加上空格的方式解决。 在Eclipse中开发时不太容易出现此异常,因为Eclipse的XML 格式化功能会自动在书写时加上空格,但如果用netbeans 开发时则要注意此项自己手动加上空格。其实不仅仅是ibatis配置文件,其它在书写hibernate等其它配置文件时最好也加上空格,以免发生此异常
JQueryEasyUI
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd“>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>jQuery EasyUI</title>
<link rel=”stylesheet” type=”text/css” href=”../themes/default/easyui.css”>
<link rel=”stylesheet” type=”text/css” href=”../themes/icon.css”>
<script type=”text/javascript” src=”../jquery-1.4.2.min.js”></script>
<script type=”text/javascript” src=”../jquery.easyui.min.js”></script>
<script type=”text/javascript”>
$(function(){
$(’#tt2′).tree({
checkbox: true,
url: ‘tree_data.json’,
onClick:function(node){
$(this).tree(’toggle’, node.target);
//alert(’you dbclick ‘+node.text);
},
onContextMenu: function(e, node){
e.preventDefault();
$(’#tt2′).tree(’select’, node.target);
$(’#mm’).menu(’show’, {
left: e.pageX,
top: e.pageY
});
}
});
});
function reload(){
var node = $(’#tt2′).tree(’getSelected’);
if (node){
$(’#tt2′).tree(’reload’, node.target);
} else {
$(’#tt2′).tree(’reload’);
}
}
function getChildren(){
var node = $(’#tt2′).tree(’getSelected’);
if (node){
var children = $(’#tt2′).tree(’getChildren’, node.target);
} else {
var children = $(’#tt2′).tree(’getChildren’);
}
var s = ”;
for(var i=0; i<children.length; i++){
s += children[i].text + ‘,’;
}
alert(s);
}
function getChecked(){
var nodes = $(’#tt2′).tree(’getChecked’);
var s = ”;
for(var i=0; i<nodes.length; i++){
if (s != ”) s += ‘,’;
s += nodes[i].text;
}
alert(s);
}
function getSelected(){
var node = $(’#tt2′).tree(’getSelected’);
alert(node.text);
}
function collapse(){
var node = $(’#tt2′).tree(’getSelected’);
$(’#tt2′).tree(’collapse’,node.target);
}
function expand(){
var node = $(’#tt2′).tree(’getSelected’);
$(’#tt2′).tree(’expand’,node.target);
}
function collapseAll(){
var node = $(’#tt2′).tree(’getSelected’);
if (node){
$(’#tt2′).tree(’collapseAll’, node.target);
} else {
$(’#tt2′).tree(’collapseAll’);
}
}
function expandAll(){
var node = $(’#tt2′).tree(’getSelected’);
if (node){
$(’#tt2′).tree(’expandAll’, node.target);
} else {
$(’#tt2′).tree(’expandAll’);
}
}
function append(){
var node = $(’#tt2′).tree(’getSelected’);
$(’#tt2′).tree(’append’,{
parent: (node?node.target:null),
data:[{
text:'new1',
checked:true
},{
text:'new2',
state:'closed',
children:[{
text:'subnew1'
},{
text:'subnew2'
}]
}]
});
}
function remove(){
var node = $(’#tt2′).tree(’getSelected’);
$(’#tt2′).tree(’remove’, node.target);
}
function update(){
var node = $(’#tt2′).tree(’getSelected’);
if (node){
node.text = ‘<span style=”font-weight:bold”>new text</span>’;
node.iconCls = ‘icon-save’;
$(’#tt2′).tree(’update’, node);
}
}
function isLeaf(){
var node = $(’#tt2′).tree(’getSelected’);
var b = $(’#tt2′).tree(’isLeaf’, node.target);
alert(b)
}
</script>
</head>
<body>
<h1>Tree</h1>
<p>Create from HTML markup</p>
<ul id=”tt1″ class=”easyui-tree” animate=”true” dnd=”true”>
<li>
<span>Folder</span>
<ul>
<li state=”closed”>
<span>Sub Folder 1</span>
<ul>
<li>
<span><a href=”#”>File 11</a></span>
</li>
<li>
<span>File 12</span>
</li>
<li>
<span>File 13</span>
</li>
</ul>
</li>
<li>
<span>File 2</span>
</li>
<li>
<span>File 3</span>
</li>
<li>File 4</li>
<li>File 5</li>
</ul>
</li>
<li>
<span>File21</span>
</li>
</ul>
<hr></hr>
<p>Create from JSON data</p>
<div style=”margin:10px;”>
<a href=”#” onclick=”reload()”>reload</a>
<a href=”#” onclick=”getChildren()”>getChildren</a>
<a href=”#” onclick=”getChecked()”>getChecked</a>
<a href=”#” onclick=”getSelected()”>getSelected</a>
<a href=”#” onclick=”collapse()”>collapse</a>
<a href=”#” onclick=”expand()”>expand</a>
<a href=”#” onclick=”collapseAll()”>collapseAll</a>
<a href=”#” onclick=”expandAll()”>expandAll</a>
<a href=”#” onclick=”append()”>append</a>
<a href=”#” onclick=”remove()”>remove</a>
<a href=”#” onclick=”update()”>update</a>
<a href=”#” onclick=”isLeaf()”>isLeaf</a>
</div>
<ul id=”tt2″></ul>
<div id=”mm” class=”easyui-menu” style=”width:120px;”>
<div onclick=”append()” iconCls=”icon-add”>Append</div>
<div onclick=”remove()” iconCls=”icon-remove”>Remove</div>
<div class=”menu-sep”></div>
<div onclick=”expand()”>Expand</div>
<div onclick=”collapse()”>Collapse</div>
</div>
</body>
</html>
Struts2的Action中的变量的getter和setter方法的命名规则
如果在Struts2的Action中有一个变量: private String CCustomerInfo cCustomerInfo;
则使用MyEclipse生成的它的getter方法是:getCCustomerInfo()
生成的setter方法是:setCCustomerInfo(CCustomerInfo cCustomerInfo);
针对类似“aTestClass”这样的类变量,IDE生成的getter和setter无法与Struts2页面上的输入框name绑定,遇到这种情况,应该将“aTestClass”这样的类变量修改成“testClass”这样的变量名,然后在生成它的getter和setter,生成的getter和setter方法应该是:
getTestClass()、setTestClass(ATestClass testClass)
更改SQL Server 2000的表所属者
使用sa用户登录查询分析器,然后运行如下SQL:
exec sp_changeobjectowner ‘Table_Name,’User_Name’ — 第一个参数:表名字,第二个参数:用户
设置Struts2的时间选择框的样式(高度、宽度)等
设置Struts2的<s:Datetimepicker />标签的样式,实例如下:
| <script language="javascript" type="text/javascript"> function setDatetimepickerStyle(){//beginDate是时间选择框的ID document.getElementById("beginDate").childNodes(1).style.width = "199px"; //宽度 } dojo.addOnLoad(setDatetimepickerStyle); </script> |
网页QQ聊天按钮-漂浮层中的QQ在线状态
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>漂浮层代码-演示</title>
<script language="javascript" type="text/javascript">
var suspendDivWidth = "100"; //漂浮层宽度
var suspendDivHeight = "300"; //漂浮层高度
var qqNumberArray = new Array("1205640864","1491012702"); //QQ号码列表
var lastScrollY=0;
function heartBeat(){
var diffY,percent;
if (document.documentElement && document.documentElement.scrollTop){
diffY = document.documentElement.scrollTop;
}
else if (document.body){
diffY = document.body.scrollTop;
}
else{
/*Netscape stuff*/
}
percent=.1*(diffY-lastScrollY);
if(percent>0){
percent=Math.ceil(percent);
}
else{
percent=Math.floor(percent);
}
document.getElementById("georgeFloatingLayer_Div1").style.top=parseInt(document.getElementById("georgeFloatingLayer_Div1").style.top)+percent+"px";
document.getElementById("georgeFloatingLayer_Div2").style.top=parseInt(document.getElementById("georgeFloatingLayer_Div1").style.top)+percent+"px";
lastScrollY=lastScrollY+percent;
}
//合成浮动层的内容
function getContentOfFloatingLayer(){
var floatingLayerContent = "";
for (var i in qqNumberArray){
floatingLayerContent = floatingLayerContent + "<a target=\"_blank\" href=\"http://wpa.qq.com/msgrd?v=3&uin="+qqNumberArray[i]+"&site=qq&menu=yes\"><img border=\"0\" src=\"http://wpa.qq.com/pa?p=2:178069108:41\" alt=\"点击这里给我发消息\" title=\"点击这里给我发消息\"></a><br />";
}
floatingLayerContent = "<fieldset id=\"georgeFloatingLayerFieldset\" style=\"-moz-border-radius:8px; text-align:center;\"><legend>在线联系</legend>"+floatingLayerContent+"</fieldset>";
return floatingLayerContent;
}
var georgeFloatingLayer_1="<DIV id=\"georgeFloatingLayer_Div1\" style=’left:0;POSITION:absolute;TOP:10px;width:0;height:0;border:0px;’></div>"
var georgeFloatingLayer_2="<DIV id=\"georgeFloatingLayer_Div2\" style=’background-color:#FFFFFF;right:2px;POSITION:absolute;TOP:10px;width:"+suspendDivWidth+"px;height:"+suspendDivHeight+"px;border:0;’>"+getContentOfFloatingLayer()+"</div>";
document.write(georgeFloatingLayer_1);
document.write(georgeFloatingLayer_2);
window.setInterval("heartBeat()",1);
</script>
</head>
<body>
<div style="height:900px; background-color:#FF0000; border:solid #3399FF 1px;">ffffffffffff</div>
</body>
</html>
查看sql server 2000的版本的三种方法
方法一:
打开企业管理器->SQL SERVRE 组->(local)window NT ->属性
产品:有personal的是个人版的,有Enterprise的是企业版的
产品版本:8.00.2039(sp4);8.00.760(sp3)
方法二:
第一步:在查询分析器
select @@version
print @@version
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
方法三:
C:\Program Files\Microsoft SQL Server\MSSQL\Binn\sqlservr.exe
点击鼠标右键查看版本也能得到,不过信息比较简单而已。8.00.2039就代表安装的SQL Server的版本了。
安装了SP4,对应号是8.00.2039
安装了SP3,对应号是8.00.760
————————————————————————————
转载自:http://www.51testing.com/?uid-166511-action-viewspace-itemid-79076
MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复。但是,此时会出现问题,这里说明几种常见问题的解决方法。
一、孤立用户的问题
比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立了一个test登录用户名,而且是以前的用户密码,用该用户登录后同样没办法操作以前属于test的用户表。
这个问题有两种办法解决。
先说解决的前提条件。
首先,要用备份文件还原数据库,我们这里的数据库名为testdb,里面有属于用户test的用户表。这个很容易了操作了,不多讲了,在企业管理器中很方便可以恢复。恢复后,就产生了孤立用户test。
然后,用sa用户或者具有DBA权限的用户登录,创建一个test数据库登录用户,密码随便设置了,也可以和以前的保持一致。我们用它来对应孤立的test用户。
下面就有两种操作方法了,第一种就是改变对象的属主,第二种就是使登录用户和数据库的孤立用户对应起来。
方法一:修改对象属主
就是将原本属于数据库用户test的用户表,修改为属于dbo的用户表;然后修改test登录用户的数据库为testdb,就可以直接使用test登录用户登录后对该数据库进行操作了。
使用的存储过程
sp_changeobjectowner [ @objname = ] ‘object’ , [ @newowner = ] ‘owner’
参数说明:
[ @objname = ] ‘object’
当前数据库中现有表、视图、用户定义函数或存储过程的名称。object 是 nvarchar(776),没有默认值。如果架构及其所有者具有相同的名称,则 object 可由现有对象所有者限定,格式为 existing_owner.object。
[ @newowner=] ‘owner ‘
将成为对象的新所有者的安全帐户的名称。owner 的数据类型为 sysname,没有默认值。owner 必须是可访问当前数据库的有效数据库用户、服务器角色、Microsoft Windows 登录名或 Windows 组。如果新所有者是没有对应数据库级主体的 Windows 用户或
Windows 组,则将创建数据库用户。
实例:
以下示例将 authors 表的所有者更改为
dbo。
EXEC sp_changeobjectowner ‘authors’, ‘dbo’;
GO

这个方法有个最大的缺点就是,当表的数量非常多,而且还有存储过程或者触发器之类的修改起来会非常麻烦,需要一个一个修改,所以,不提倡使用。现在网上有一个批量修改的存储过程,大家可以找一下,这里就不说了,而是教大家一个更简单的。
方法二:使登录用户和数据库的孤立用户对应起来
其实我们建立了同样名称的数据库登录用户后,数据库中的表我们照样不能使用时因为sid的不同,就是系统登录表和数据库用户表中的用户名相同,单是sid字段,数据库中的还是以前旧系统的sid值,所以我们就要把它对应成我们新建的,数据库靠sid来识别用户。
这里可以使用存储过程sp_change_users_login。它有三种动作,分别是report,update_one和auto_fix。
运行下面的代码,系统会列出当前数据库的孤立用户数。
sp_change_users_login ‘report’
我们只需要选择当前数据库为testdb,然后运行
sp_change_users_login ‘update_one’,'test’,'test’
系统就会提示修复了一个孤立用户。
如果没有建立test的登录用户,还可以用
sp_change_users_login ‘Auto_Fix’, ‘test’, NULL, ‘testpassword’
来创建一个登录用户名为test,密码为testpassword的用户与之对应。
好了,到这里通常情况下,数据库对象得到访问问题已经解决了。如果有多个数据库中有同一个用户的数据表,只需要选择不同的数据库,执行update_one的那个就行了。
二、对象名 ‘xxxx’ 无效的问题
这里可能会有人遇到对象名 ‘xxxx’无效的问题。系统表却不会产生这个问题,而用户表还要加上用户名,然后是表明才能访问,比如select * from author,会说对象名 author 无效,而用select * from test.author就可以访问,这个是用户首选身份的问题。
解决很简单,就是察看test登录用户是否具有dba的权限或者系统管理的权限,有的话去掉就行了。
因为如果用户有dba身份,那么它登陆后的默认表空间是dbo的系统表空间,所以去掉了之后,就会以正常的test表空间访问数据表了。
转载自:http://www.cnblogs.com/wlq2000/archive/2008/01/07/1029087.html
IE下Ajax缓存问题的解决办法
今天下午在做要素页面无刷新添加的时候,IE下遭遇Ajax缓存戏弄,因为刚开始并不知道IE有这个坏毛病,折腾了我一下午,终于解决问题。郁闷之余,总结一下解决办法:
在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回上一次的结果,造成混乱,而FF下不会出现这种情况。为了不受缓存影响,可以这样做:
IE访问策略:Internet选项–浏览历史记录–设置– Internet 临时文件的选项改为每次访问网页时也可以
1: 在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数
在javascript发送的URL后加上t=Math.random()
例如这样:URL+"&"+"t="+Math.random();或者new Date();
2: 在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
一般情况下,这里的XMLHttpRequest不会直接使用
你应该可以找到这样的代码
XXXXX.send(YYYYYY);
那么,就把它变成
XXXXX.setRequestHeader("If-Modified-Since","0");
XXXXX.send(YYYYYY);
实践证明,两种方法都非常有效。
转载自:http://www.blogjava.net/dashi99/archive/2010/08/26/329973.html
ASP中用ajax方式获得session
前个月朋友接到一个asp的私活,于是就做了。
技术方面没什么难点,asp虽然以前没怎么写过,可是看看书也就OK了。
基本全部做完后,出了一个bug。
前期做的时候,登录方式顺手用了ajax来做,登录前先判断在session中是否存在值,如果存在,那么无需登录;如果不存在,那就弹出登录页面登录。
由于我是用的ff浏览器,一直没发现什么问题。上个礼拜提交给用户看的时候,说用IE登录完之后无效,大惊。结果还真的是这样。。很囧
登录代码如下:
- //从服务器查询是否存在session
- j.ajax({
- type:"GET",
- url:"sessioncheck.asp",
- data:"",
- timeout: 1000,
- error: function(){
- alert(’sorry, server is busy now!’);
- },
- success:function(comments_data){
- if(comments_data == 1){
- el.createDialog(opts);
- j.startOver();
- }
- else{
- var sql = selectSQL(searchkey,stype);
- window.location.href = sql;
- }
- }
- });
//从服务器查询是否存在session
j.ajax({
type:"GET",
url:"sessioncheck.asp",
data:"",
timeout: 1000,
error: function(){
alert('sorry, server is busy now!');
},
success:function(comments_data){
if(comments_data == 1){
el.createDialog(opts);
j.startOver();
}
else{
var sql = selectSQL(searchkey,stype);
window.location.href = sql;
}
}
});
大致是这样 sessioncheck.asp里面无非就是去查session,代码如下:
- if session("username") = "" then
- Response.Write("1")
- else
- Response.Write("2")
- end if
if session("username") = "" then
Response.Write("1")
else
Response.Write("2")
end if
结果就是用IE这个session("username")死活没有,timeout设置了也没用。
去网上查了半天,发现同样问题的还挺多,最后查到原因:缓存问题。
异步get获取时,如果url不变,是直接调用的缓存中的信息,然后就导致了一直获得不到session里的值。
解决方法那很简单了,google "asp 清除缓存" 一大堆。
最后是在sessioncheck.asp里添加了一段,如下:
- Response.Buffer =True
- Response.ExpiresAbsolute =Now() - 1
- Response.Expires=0
- Response.CacheControl="no-cache"
- if session("username") = "" then
- Response.Write("1")
- else
- Response.Write("2")
- end if
Response.Buffer =True
Response.ExpiresAbsolute =Now() - 1
Response.Expires=0
Response.CacheControl="no-cache"
if session("username") = "" then
Response.Write("1")
else
Response.Write("2")
end if
小问题真是搞死人。。