RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Java>列表

使iTracker正确显示描述中的空格

来源: 作者: 时间:2007-09-28 点击:
  ITracker 是基于 J2EE 的 issue/bug 跟踪系统,支持多用户、多项目、邮件通知等。类似的产品还有 Scarab、ELIPS、Bugtracker、BugRat、Abuky、TrackIt、jTrac、Bugzilla、JTrac、Project Dune.

  iTracker确实是个好东西,但对一个东西过熟了,难免期望值就更高了。如果你用 iTracker 作过 Code Review 的话,你就会发现,你贴上去的代码,浏览显示出来的是代码中的空格少了,尤其是没了退格规范显示了。例如,你贴的代码是:

int len = input.length();
for(int i = 0; i < len; i++)
{
char c = input.charAt(i);
if(c == '\'')
sb.append("''");
else
sb.append(c);
}

  结果显示出来的却成如下样子

int len = input.length();
for(int i = 0; i < len; i++)
{
char c = input.charAt(i);
if(c == '\'')
sb.append("''");
else
sb.append(c);
}

  对于现像的准确描述是:

   1、每行行首的空格(或者Tab),不论多少个都被去除
   2、每行行间的多个空格(或者Tab),只会显示一个空格

  如果提的恰好是关于代码规范的问题,那就没办法用来说明问题了。

  这是有赖于HTML给我们的处理结果,记得最早我们使用HTML的时候大多都会产生这样一个迷惑,网页中如何输入空格?因为无论我们在HTML源文件输入多少个空格,浏览器总是对我们爱理不理,后来有大哥哥大姐姐告诉我们说,输入法切换到全角时,在HTML源文件中输入空格,浏览器中能正常显示,我们照做了,果然行,再后来我们知识进步了,知道   和<pre></pre>的功用,也可能体验到了全角空格可能在不同字符集下造成乱码。(有些题外话了)

  下面就来说如何能让贴的代码显示时是它的原本样式,以及需作何修改。首先假设你下载的是 iTracker Express 版,并解压缩在 C:\itracker_2.4.2\,那么你的应用的包就是 C:\itracker_2.4.2\jboss-3.2.5\server\default\deploy\itracker.ear 包,我们下面就是要对这个包动手术了。

  无论是 jar、war 还是 ear 文件,它们都是标准的 zip 文件,如果你的 winrar/winzip 没有关联与它们关联,那就用手动 Open With 吧。

  刚开始我也没有意识到是上面的原因,翻了一下代码没发现有对输入文本每行行首去空格处理,在数据库表 issuehistorybean 中保存着完好格式。

  我们先从页面显示数起,好看个端倪,用 winrar/winzip 解开 itracker.ear\web-app.war 看到 view_issue.jsp 中显示描述的代码是:

<it:formatHistoryEntry projectOptions="<%= project.getOptions() %>"><%= history[i].getDescription() %>it:formatHistoryEntry>

  由此我们需要追踪到formatHistoryEntry标签实现,代码是itracker.ear\web-app.war\WEB-INF\lib\itracker_taglib.jar\cowsultants\itracker\web\taglib\FormatHistoryEntryTag.class,反编译这个代码,可以看到在 doEndTag()方法中有
if(ProjectUtilities.hasOption(1, projectOptions))
text = HTMLUtilities.removeMarkup(text);
else
if(ProjectUtilities.hasOption(64, projectOptions))
text = HTMLUtilities.escapeTags(text);
else
text = HTMLUtilities.newlinesToBreaks(text);

  最后一行,是对文本框中输入的回车转换成正确换行用的,进入这个方法吧,在 itracker.ear\ejb-app.jar\cowsultants\itracker\ejb\client\util\HTMLUtilities.class 中 newlinesToBreaks(String input) 代码如下:
public static String newlinesToBreaks(String input)
{
if(input == null || "".equals(input) || input.indexOf('\n') == -1)
return input;
StringBuffer buf = new StringBuffer();
char chars[] = input.toCharArray();
for(int i = 0; i < chars.length; i++)
{
if(chars[i] == '\r')
continue;
if(chars[i] == '\n')
buf.append("<br>");
else
buf.append(chars[i]);
}

return buf.toString();
}

  (我们要注意在itracker.ear\web-app.war\WEB-INF\lib\itrackerClient.jar\cowsultants\itracker\ejb\client\util也有 HTMLUtilities 类,但页面标签并非调用这个类)

  它忽略掉了行首空格和行间多个空格的显示,那么我们在这里要处理的就是把空格原本转换为   ,把Tab显示为四个或八个   ,我这里有四个 表示一个Tab吧,所以把上面的 newlinesToBreaks(String input)代码改写成:

public static String newlinesToBreaks(String input)
{
if(input == null || "".equals(input) || input.indexOf('\n') == -1)

共2页: 上一页 1 [2] 下一页
最新评论共有 1 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册