有人发现过struts中有这样的错误吗?
在使用struts1.0或1.1,连接oracle数据库,比如我在news表中有一个字段叫content,现在我在content中输入一篇文章,这篇文章是正常的格式,有标题(显示在文章的第一行,并且在中间位置),正文,正文的每个段落第一行都空两格。
我先查看插入到数据库中的值是否正常,发现一切正常。现在当我用诸如
<logic:iterate id="info" name="newsinfo">
<bean:write name="info" property="content"/>
</logic:iterate>
查出来显示在网页中时,却是全都挤在一起,没有分段,没有空格。
当用System.out.println(content);打字出来时,就是一切正常。
有人发现过这样的错误吗?
问题点数:0、回复次数:12Top
1 楼xinlcao(老猫在线)回复于 2004-12-03 15:41:37 得分 0
这个不是struts的问题,是html的问题,content的内容如果想保持格式不变,应该将所有半角空格转化成全角空格,把\n转换成<br>,然后再存入数据库。Top
2 楼chubbchubb(长街)回复于 2004-12-03 15:51:25 得分 0
首先,你的content里面的空格,回行字符都要换成HTML的 和<BR>
但是又不能用<bean:write name="info" property="content"/>这样的形式,因为你会看到回车全都变成了<BR>,这个本来应该是由浏览器当作HTML代码解释的。
这时候,你可以看一下你的网页的source code ,你所看到的<BR>都变成了“<BR>”
这是因为bean:write这个taglib会把HTML的保留字符全都给你编码的。
解决办法,不要用bean:write。直接<%out.print(content)%>吧,虽然不好看。
Top
3 楼chubbchubb(长街)回复于 2004-12-03 16:06:08 得分 0
不好意思,说错话了。真是没有调查就没有法发言权阿。
我看了一下Struts1.2的source,这个编码是是可以控制的,你可以不让他给你过滤。
有个属性叫“filter”
<bean:write filter="flase" name="info" property="content"/>
这个在Struts1.1上也是可以用的,1.0.2我就不知道了
应该就没有问题了,试试吧。Top
4 楼chubbchubb(长街)回复于 2004-12-03 16:07:34 得分 0
应该是
<bean:write filter="false" name="info" property="content"/>
false拼错了,不好意思。
Top
5 楼steveyue(约翰岳)回复于 2004-12-03 16:07:49 得分 0
回 xinlcao(老猫在线),你所说的我当然全都试了,struts中就是没有解决掉这个问题,把\n转换成<br>,它会在网页上把<br>全部显示出来,而不是我们期望的效果,便成分行。
回chubbchubb(长街),看来你也遇到过这样的问题,没错,如果要是用<bean:write name="info" property="content"/>这样的形式,回车全都变成了<BR>显示在网页上了,查看源码,<BR>也全都变成了“<BR>”,这正是我说的struts的bug,而你所说“不要用bean:write。直接<%out.print(content)%>”也没错,改用<%out.print(content)%>,确实解决问题,但这并不妥,因为,如果这样改的话,诸如:
<logic:iterate id="info" name="newsinfo">
<bean:write name="info" property="content"/>
</logic:iterate>
这类的标签也就一点意义没有了,也就谈不上struts的优越性了,你说是吧?
Top
6 楼steveyue(约翰岳)回复于 2004-12-03 16:08:58 得分 0
回 xinlcao(老猫在线),你所说的我当然全都试了,struts中就是没有解决掉这个问题,把\n转换成<br>,它会在网页上把<br>全部显示出来,而不是我们期望的效果,便成分行。
回chubbchubb(长街),看来你也遇到过这样的问题,没错,如果要是用<bean:write name="info" property="content"/>这样的形式,回车全都变成了<BR>显示在网页上了,查看源码,<BR>也全都变成了“<BR>”,这正是我说的struts的bug,而你所说“不要用bean:write。直接<%out.print(content)%>”也没错,改用<%out.print(content)%>,确实解决问题,但这并不妥,因为,如果这样改的话,诸如:
<logic:iterate id="info" name="newsinfo">
<bean:write name="info" property="content"/>
</logic:iterate>
这类的标签也就一点意义没有了,也就谈不上struts的优越性了,你说是吧?
Top
7 楼steveyue(约翰岳)回复于 2004-12-03 16:18:59 得分 0
回chubbchubb(长街),好好,分段问题解决,但还是要把"\n"转化成<br>,第一行还是顶格啊,没有空格啊?Top
8 楼chubbchubb(长街)回复于 2004-12-06 11:23:13 得分 0
第一行没有空格?是不是哪里用了trim()?
还有,别的地方的空格没有问题?Top
9 楼steveyue(约翰岳)回复于 2004-12-11 12:01:20 得分 0
是的,别的地方没有任何问题,也没用trim()Top
10 楼chubbchubb(长街)回复于 2004-12-16 09:07:54 得分 0
不太清楚了
你确认两个
1:看看生成的HTML代码,首行的前面有没有
如果有,那就是HTML显示控制的问题
2:从DB取出来的时候,前面的空格有没有?Top
11 楼fmzbj(mz)回复于 2004-12-16 09:52:43 得分 0
这不是Struts是的问题,你把CLOB字段的值转达成String类型,设置成属性,在页面上直接用 String 变量=request.getAttribute("").toString();
之后用:<%=变量%>
或直接用<bean:write name="" property=""/>输出不行。
这里的关键是要注意将CLOB 字段转成String 类型
Top
12 楼fmzbj(mz)回复于 2004-12-16 09:53:22 得分 0
打错了
或直接用<bean:write name="" property=""/>输出也行。
Top




