<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.5.1" -->
<rss version="0.92">
<channel>
	<title>蓝语</title>
	<link>http://www.bluesaying.com</link>
	<description>落Nicety的博客</description>
	<lastBuildDate>Mon, 27 Oct 2008 07:03:37 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>正确显示taxtarea中的文本</title>
		<description>在taxtarea中输入的文本。如果含有回车或空格。在界面上显示的时候则不哪么正常。回车消失了，空格变短了。
如何解决这个问题呢。有2种方法。
1.使用&#60;pre&#62;标签
w3c对pre元素是这样定义的：pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。
更详细的内容请参考 http://www.w3school.com.cn/tags/tag_pre.asp
也就是说包含在pre标签中的回车和空格会正常的显示出来。包括你在页面代码中输入的。所以如果使用pre元素你需要这样写：
&#60;pre&#62;要输出的文本&#60;/pre&#62;
，而不是这样：
 &#60;pre&#62;
要输出的文本
&#60;/pre&#62;
后一种写法 文本前的空白也会被显示的。除非你真的希望这样:)
2.对文本内容进行替换。
回车和空格不能正确显示，究其原因是他们各自的表示方式不同。在textarea里面输入的回车是字符"\r"，html中的回车(换行)是"&#60;br/&#62;"。
textarea中输入的空格是空白" "，而html中的一个空格是"&#38;nbsp;"。理所当然不能正确显示。好了现在知道了原因就有了第二种解决方案了。
只要我们将输入的文本中相应的"元素"替换成html认识的就ok了。因此下面一行代码即可解决问题：
"要输出的文本".replaceAll(" ","&#38;nbsp;").replaceAll("\r","&#60;br/&#62;");
等等。这里还有一点小问题。把一个空格替换成一个"&#38;nbsp;"空格看上去仍然要少些。如果你喜欢可以替换成2个。

最后，除了回车和空格以外还有很多空白字符如tab等，如果你喜欢可以一并处理了^_^

最后的最后，如果本来的文本是很长的一行，使用pre标签后就不会自动换行。结果页面出现横向滚动条。不知道有没有好的解决方法？
而将第二种方法处理过的文本放在&#60;p&#62;标签中显示，就可以显示正常。

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();
 </description>
		<link>http://www.bluesaying.com/2008/10/27/9/</link>
			</item>
	<item>
		<title>测试你按下的是那个键</title>
		<description>做web开发的时候，有时候需要根据键盘进行一些操作，例如按下Enter的时候提交表单，禁止用户输入某些特殊字符，设置快捷键等等。这时候需要找出用户按下的是那些按键，每次都找对照表太麻烦了.so..写了这么个小程序来测试按键。^_^

其中的charCode是根据ascii表转换的，不一定准确。





keyCode :



charCode  :



shift-key :



ctrl-key :



alt-key :



下面是ascii编码表：



源代码：
&#60;script type="text/javascript"&#62;

function showKey(e){

e

= e &#124;&#124; window.event;

document.getElementById(

"keyCode").value = e.keyCode;

document.getElementById(

"charCode").value = String.fromCharCode(e.keyCode);

document.getElementById(

"shiftKey").value = e.shiftKey;

document.getElementById(

"ctrlKey").value = e.ctrlKey;

document.getElementById(

"altKey").value = e.altKey;

}

$(document).ready(

function(){

document.onkeydown

= showKey;

});

&#60;/script&#62;

&#60;br /&#62;

&#60;table&#62;

&#60;tbody&#62;

&#60;tr&#62;

&#60;td&#62;keyCode : &#60;/td&#62;

&#60;td&#62;&#60;input id="keyCode" type="text" /&#62; &#60;/td&#62;

&#60;/tr&#62;

&#60;tr&#62;

&#60;td&#62;charCode  : &#60;/td&#62;

&#60;td&#62;&#60;input id="charCode" type="text" /&#62; &#60;/td&#62;

&#60;/tr&#62;

&#60;tr&#62;

&#60;td&#62;shift-key : &#60;/td&#62;

&#60;td&#62;&#60;input id="shiftKey" type="text" /&#62; &#60;/td&#62;

&#60;/tr&#62;

&#60;tr&#62;

&#60;td&#62;ctrl-key : &#60;/td&#62;

&#60;td&#62;&#60;input id="ctrlKey" type="text" /&#62; &#60;/td&#62;

&#60;/tr&#62;

&#60;tr&#62;

&#60;td&#62;alt-key : ...</description>
		<link>http://www.bluesaying.com/2008/05/25/8/</link>
			</item>
	<item>
		<title>sun.io.MalformedInputException异常处理</title>
		<description>文件编码导致的sun.io.MalformedInputException异常
如果你没有使用ibm的jdk，却依然遇到了这个问题。
如果你的异常是在解析xml的时候出现的，如果你的异常是某些地方有某些地方没有。
例如tomcat里面没有，weblogic上有。抑或这个domain有那个domain却没有。而确实是同一个应用。
哪么你遇到的可能和笔者要讲的是同一个问题。

你的xml文件本身是UTF-8编码(注意是文件是UTF-8编码，不是xml文件里面指定的文件内容是UTF-8编码)？
你的xml文件里面含有中文？
你使用UltraEdit编辑xml文件？
删掉中文，问题依旧？

那么可以肯定你的问题就是笔者要讲的问题

首先给出解决方案：
方案一：
1.xml用记事本打开，删除里面的中文。
2.在windows 本地新建一个txt文件，用记事本(注意不能用UltraEdit)打开。
3.将xml里面的内容复制到新建的txt文件中。
4.将txt文件重名为xml文件的名称。覆盖原来的xml文件
5.看看问题是不是解决了，咔咔 神奇吧。

方案二：(适用于使用eclipse ide的程序员们，其他的能更改文件编码的程序也行，不过没测试过)
1.将xml文件的内容剪切出来，保存在别处，什么文件都行，最后是txt中。留下一个空的xml文件
2.将空的xml文件的编码修改成GBK。注意是文件的编码，不是xml的那个声明。当然这里已经删了。
3.这时候是否看到文件的头部有乱码? 删之!
4.将原来文件的内容烤回来
5.ok问题解决，这种方法不用删除中文。

问题的根源：
估计有些人已经明白是什么原因了。呵呵，那就是xml文件那个BOM的头导致的这个问题！
哦？还有没明白的？下面详细说明下：
xml文件分为两种，一种是有BOM信息的，它表示文件是xml格式
另外还有没有BOM信息的xml文件。
就是这个特殊的BOM信息导致了解析xml出错。
那跟UltraEdit有什么关系？UltraEdit在编辑xml文件的时候会自动加上这个可恶的BOM信息。

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


var pageTracker = _gat._getTracker("UA-4040139-1");
pageTracker._initData();
pageTracker._trackPageview();
 </description>
		<link>http://www.bluesaying.com/2008/05/25/7/</link>
			</item>
	<item>
		<title>详细的log4j配置说明</title>
		<description>详细的log4j配置说明

一直没有认真研究过log4j的配置，这几天比较闲，认真的看了看。现在总结下。
Log4j有三个主要的组件：Loggers(记录器)，Appenders(输出源)和Layouts(布局)。
log4j的配置文件也可以是多种格式的，但主要是xml文件和properties文件
1.配置根logger:
语法：log4j.rootLogger =[level],appenderName1,appenderName2,...
level ：OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL的其中一个。
appenderName：日志输入的目的地，可以有多个地方
根logger是一定存在的，根logger指定了默认的日志配置。
2.配置日志输入的目的地(appender)
语法：log4j.appender.appenderName = fully.qualified.name.of.appender.class
fully.qualified.name.of.appender.class 可以是以下的几种:
(1).org.apache.log4j.ConsoleAppender（控制台）
(2).org.apache.log4j.FileAppender（文件）
(3).org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）
(4).org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件）
(5).org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）
其中每一个又有不同的配置选项:
(1).org.apache.log4j.ConsoleAppender（控制台）的选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err：默认情况下是：System.out,指定输出控制台
(2).org.apache.log4j.FileAppender的选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。
(3).org.apache.log4j.DailyRollingFileAppender的选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。
DatePattern='.'yyyy-ww:每周滚动一次文件，即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下：
1)'.'yyyy-MM: 每月
2)'.'yyyy-ww: 每周
3)'.'yyyy-MM-dd: 每天
4)'.'yyyy-MM-dd-a: 每天两次
5)'.'yyyy-MM-dd-HH: 每小时
6)'.'yyyy-MM-dd-HH-mm: 每分钟
(4).org.apache.log4j.RollingFileAppender
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时，将会自动滚动，即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

3.配置日志输入的格式
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
这里需要说明的就是日志信息格式中几个符号所代表的含义：
-: 信息输出时左对齐；
%p: 输出日志信息优先级，即DEBUG，INFO，WARN，ERROR，FATAL,
%d: 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目，通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置，相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符，Windows平台为"rn"，Unix平台为"n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如：
1)%20c：指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，默认的情况下右对齐。
2)%-20c:指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，"-"号指定左对齐。
3)%.30c:指定输出category的名称，最大的宽度是30，如果category的名称大于30的话，就会将左边多出的字符截掉，但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格，并且右对齐，如果其名称长于30字符，就从左边交远销出的字符截掉。
下面是一个详细的配置样例

og4j.rootLogger=DEBUG,CONSOLE,A1,im
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
log4j.addivity.org.apache=true
###################
# Console Appender(输出到控制台)
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x ...</description>
		<link>http://www.bluesaying.com/2008/05/25/6/</link>
			</item>
	<item>
		<title>hibernate 映射 clob字段</title>
		<description>项目中用到 长文本作为内容

pojo中使用 string 类型 数据库 oracle9i 用的的clob字段

pojo:

private String content;

public void setContent(String content){

this.content = content;

}

hibernate配置
&#60;property name="content" column="C_Content" type="text" length="10000"&#62;&#60;/property&#62;
发现当content 字段的内容在 1000~2000 字符长度中间的时候出现
sql错误
而文本长度小于1000 长于2000 都没有问题。
问题：hibernate配置中length="10000"属性是做什么用的？我尝试过 将他配置成1000，5000，1w或者不配置 最后执行的结果都一样

查资料 google baidu。。。
一般认为 length指定的是text的最大长度，这里显然不是
又有认为 是将java中string 值当作clob处理的最小长度，也就是当string长度小于这个值的时候 当string处理，当string大于这个长度的时候当text(clob)处理。但是我将length设置为1000时，输入1k+文本 依然有sql错误。超过2000却没有问题。

so..这两个都不是答案.
又有人说，介个是jdbc的 bug 换成10g的就米有问题了。遂尝试..未果，问题依旧。
finally..这个length属性到底干嘛用 没搞清楚.. 抑或 不该这么配置？
继续寻找，找到另外一种解决办法。可以通过spring来解决这个问题
hibernate配置
&#60;property name="content" column="C_Content" length="10000"
type="org.springframework.orm.hibernate3.support.ClobStringType"&#62;
&#60;/property&#62;
spring配置
&#60;bean id="oracleLobHandler"

class="org.springframework.jdbc.support.lob.OracleLobHandler"&#62;

&#60;property name="nativeJdbcExtractor"&#62;

&#60;ref local="nativeJdbcExtractor"/&#62;

&#60;/property&#62;

&#60;/bean&#62;

&#60;bean id="nativeJdbcExtractor"

class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"&#62;

&#60;/bean&#62;
上面2个bean是关键
然后在sessionFactory的bean中加入
&#60;bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&#62;

&#60;property name="lobHandler"&#62;

&#60;ref bean="oracleLobHandler" /&#62;

&#60;/property&#62;

。。。其他

&#60;/bean&#62;

 
问题解决，但是length="10000" 属性依然无用，可正常插入 任意长度的字符串
但是这样的话 数据库就不能跨平台了..so 期待跨数据库平台的 方案~~
 ...</description>
		<link>http://www.bluesaying.com/2008/03/05/4/</link>
			</item>
</channel>
</rss>
