JAVA

          人生若只如初見(jiàn),何事秋風(fēng)悲畫(huà)扇。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            50 隨筆 :: 25 文章 :: 157 評(píng)論 :: 0 Trackbacks

          JSP頁(yè)面里面的內(nèi)容往往是動(dòng)態(tài)顯示,當(dāng)然也一般是從DB中按需取出來(lái)的了!
          在顯示過(guò)程也許會(huì)碰到這樣的問(wèn)題:

          我們通過(guò)后臺(tái)操作將一些文字(通知什么的)傳到DB中,其中難免會(huì)分段,分行什么的.可是我們從DB中取出來(lái)直接在JSP頁(yè)面顯示時(shí)出來(lái)的卻是從頭到尾的一片文字!!!

          解決方法:
          首先應(yīng)將在DB中的相關(guān)顯示文字取出來(lái)的時(shí)候進(jìn)行一個(gè)轉(zhuǎn)換,比如說(shuō)把里面的回車,換行,空格什么的轉(zhuǎn)換成HTML能識(shí)別的標(biāo)記.也許以下代碼正是我們需要的:


          public class CheckData extends Object {


              
          /** *//** *//** *//**
               * CheckData 構(gòu)造器
               *
               * 
          @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();   // 源字符串長(zhǎng)度
                  int lengthOfOld = oldString.length();   // 老字符串長(zhǎng)度

                  
          int posStart = 0;   // 開(kāi)始搜索位置
                  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 代碼輸出
               * 只轉(zhuǎn)換特殊字符,適合于 HTML 中的表單區(qū)域
               *
               * 
          @param str 要格式化的字符串
               * 
          @return 格式化后的字符串
               
          */

              
          public static String toHtmlInput(String str) {
                  
          if (str == null)    return null;

                  String html 
          = new String(str);

                  html 
          = Replace(html, "&""&amp;");
                  html 
          = Replace(html, "<""&lt;");
                  html 
          = Replace(html, ">""&gt;");

                  
          return html;
              }


              
          /** *//** *//** *//**
               * 將字符串格式化成 HTML 代碼輸出
               * 除普通特殊字符外,還對(duì)空格、制表符和換行進(jìn)行轉(zhuǎn)換,
               * 以將內(nèi)容格式化輸出,
               * 適合于 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, "  "" &nbsp;");

                  
          return html;
              }


          }



          好啦,現(xiàn)在你可以直接通過(guò)類調(diào)用相應(yīng)的方法(比如說(shuō)toHtml)后,就成了HTML能識(shí)別的格式了.如你在DB中的內(nèi)容可能如下:

          "lilin and you do it "
          也許轉(zhuǎn)換后成了
          "lilin and you do it<br> "

          接下來(lái)也許我們會(huì)很自然地想到用JS(innerTHML,document.write()等等來(lái)處理)來(lái)將其輸出到JSP中.然而結(jié)果卻往往不是我們想要的,原因是你在DB中的數(shù)據(jù)不符合JS的語(yǔ)法,因?yàn)樵贘S中要求所有的輸出語(yǔ)句均在同一行中,否則就會(huì)出現(xiàn)"未結(jié)束的字符串常量"的錯(cuò)誤.而我們轉(zhuǎn)換后的僅僅是把DB中數(shù)據(jù)用HTML標(biāo)識(shí)符來(lái)替代,比如說(shuō)若有一行空白,那么很可能對(duì)應(yīng)的就是一個(gè)"<BR>"符號(hào),但是這個(gè)符號(hào)依然會(huì)占一行...(大概是這個(gè)意思)

          我在JSP頁(yè)面中,直接將它們out出來(lái)的(想一下servlet是怎么直接顯示布面內(nèi)容的^_^,雖然我一向?qū)ervlet這樣的行為比較反感)!不管我們轉(zhuǎn)換后的字符串中有多少行,全部把它放到out中就可以了!惟一的缺陷是又要在JSP中多一個(gè)"<%=%>"符號(hào).

          不知道各位有什么別的好方法沒(méi)有?

          posted on 2006-03-15 12:50 Jkallen 閱讀(7981) 評(píng)論(7)  編輯  收藏 所屬分類: JEE學(xué)習(xí)AJAX

          評(píng)論

          # re: 格式化JSP頁(yè)面 2006-03-15 16:11 zgli
          推薦 FCKEditor  回復(fù)  更多評(píng)論
            

          # re: 格式化JSP頁(yè)面 2006-03-15 17:44 lizongbo
          你的toHtml的效率低的簡(jiǎn)直不是一般的低,

          建議你去看看tomcat的例子:

          apache-tomcat-5.5.15\webapps\servlets-examples\WEB-INF\classes\util\HTMLFilter.java

            回復(fù)  更多評(píng)論
            

          # re: 格式化JSP頁(yè)面 2006-03-16 08:30 Jkallen
          apache的那個(gè)程序確實(shí)要好不少!

          倒是沒(méi)注意到tomcat里有這樣的東西...
          謝謝lizongbo  回復(fù)  更多評(píng)論
            

          # re: 格式化JSP頁(yè)面 2006-03-17 22:19 holyfield
          寫(xiě)得不錯(cuò),謝謝。  回復(fù)  更多評(píng)論
            

          # re: 格式化JSP頁(yè)面 2006-06-02 17:17 pc
          http://www.kpwang.com/jsp_java/200647174812.htm jsp+tomcat+mysqlsevletjavabean配置全過(guò)程

          http://www.kpwang.com/jsp_java/20064692816.htm jsp中使用xmlhttp進(jìn)行數(shù)據(jù)交互

          http://www.kpwang.com/jsp_java/20064691542.htm jsp文件操作大全  回復(fù)  更多評(píng)論
            

          # re: 格式化JSP頁(yè)面[未登錄](méi) 2007-09-04 18:35 RatKing
          我在JSP中使用JSTL的<c:out>標(biāo)簽向頁(yè)面輸出內(nèi)容,已經(jīng)自動(dòng)轉(zhuǎn)碼處理了,根本無(wú)需自己編程動(dòng)手。  回復(fù)  更多評(píng)論
            

          # re: 格式化JSP頁(yè)面 2009-03-30 22:47 niname
          謝謝您,真好用!  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 泾阳县| 南投县| 潮州市| 清苑县| 贺兰县| 大化| 通海县| 鹤岗市| 元氏县| 富阳市| 汝阳县| 浪卡子县| 襄汾县| 突泉县| 宣城市| 新干县| 团风县| 鲁山县| 新宁县| 耒阳市| 盐边县| 云安县| 桐乡市| 株洲县| 海南省| 卫辉市| 东山县| 隆林| 四会市| 尚志市| 柏乡县| 泸溪县| 闽清县| 泾川县| 临城县| 兴宁市| 弥勒县| 玉龙| 长治县| 封开县| 慈利县|