JSP页面里面的内容往往是动态显示,当然也一般是从DB中按需取出来的了!
在显示过程也许会碰到这样的问题:
我们通过后台操作将一些文字(通知什么的)传到DB中,其中难免会分段,分行什么的.可是我们从DB中取出来直接在JSP页面显示时出来的却是从头到尾的一片文字!!!
解决方法:
首先应将在DB中的相关显示文字取出来的时候进行一个转换,比如说把里面的回车,换行,空格什么的转换成HTML能识别的标记.也许以下代码正是我们需要的:
public class CheckData extends Object {
/** *//** *//** *//** *//** *//** *//** *//**
* CheckData 构造器
*
* @param
* @return
*/
public CheckData() {}
/** *//** *//** *//** *//** *//** *//** *//**
* 字符串替换,将 source 中的 oldString 全部换成 newString
*
* @param source 源字符串
* @param oldString 老的字符串
* @param newString 新的字符串
* @return 替换后的字符串
*/
public static String Replace(String source, String oldString, String newString) {
StringBuffer output = new StringBuffer();
int lengthOfSource = source.length(); // 源字符串长度
int lengthOfOld = oldString.length(); // 老字符串长度
int posStart = 0; // 开始搜索位置
int pos; // 搜索到老字符串的位置
while ((pos = source.indexOf(oldString, posStart)) >= 0) {
output.append(source.substring(posStart, pos));
output.append(newString);
posStart = pos + lengthOfOld;
}
if (posStart < lengthOfSource) {
output.append(source.substring(posStart));
}
return output.toString();
}
/** *//** *//** *//**//*
public static String ReplaceIgnoreCase(String source, String oldString, String newString) {
}
*/
/** *//** *//** *//** *//** *//** *//** *//**
* 将字符串格式化成 HTML 代码输出
* 只转换特殊字符,适合于 HTML 中的表单区域
*
* @param str 要格式化的字符串
* @return 格式化后的字符串
*/
public static String toHtmlInput(String str) {
if (str == null) return null;
String html = new String(str);
html = Replace(html, "&", "&");
html = Replace(html, "<", "<");
html = Replace(html, ">", ">");
return html;
}
/** *//** *//** *//** *//** *//** *//** *//**
* 将字符串格式化成 HTML 代码输出
* 除普通特殊字符外,还对空格、制表符和换行进行转换,
* 以将内容格式化输出,
* 适合于 HTML 中的显示输出
*
* @param str 要格式化的字符串
* @return 格式化后的字符串
*/
public static String toHtml(String str) {
if (str == null) return null;
String html = new String(str);
html = toHtmlInput(html);
html = Replace(html, "\r\n", "\n");
html = Replace(html, "\n", "<br>\n");
html = Replace(html, "\t", " ");
html = Replace(html, " ", " ");
return html;
}
}
好啦,现在你可以直接通过类调用相应的方法(比如说toHtml)后,就成了HTML能识别的格式了.如你在DB中的内容可能如下:
"lilin and you do it "
也许转换后成了
"lilin and you do it<br> "
接下来也许我们会很自然地想到用JS(innerTHML,document.write()等等来处理)来将其输出到JSP中.然而结果却往往不是我们想要的,原因是你在DB中的数据不符合JS的语法,因为在JS中要求所有的输出语句均在同一行中,否则就会出现"未结束的字符串常量"的错误.而我们转换后的仅仅是把DB中数据用HTML标识符来替代,比如说若有一行空白,那么很可能对应的就是一个"<BR>"符号,但是这个符号依然会占一行...(大概是这个意思)
我在JSP页面中,直接将它们out出来的(想一下servlet是怎么直接显示布面内容的^_^,虽然我一向对servlet这样的行为比较反感)!不管我们转换后的字符串中有多少行,全部把它放到out中就可以了!惟一的缺陷是又要在JSP中多一个"<%=%>"符号.
不知道各位有什么别的好方法没有?