关于jsf的变量值中含有乱码导致jsp返回空白页的问题

micro2000 2011-05-27 05:11:22
我在见JBOSS从4.0.4升级到5.1.0后,出现下面的问题(在jboss4中此问题不存在,即乱码也可以显示,乱码处用问号?表示):

<%@page contentType="text/html"%>
<%@page pageEncoding="GBK"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
.....
.....
<h:outputText escape="false" value="#{DataAction.showdata}"/>

当DataAction的showdata变量中,含有不可见字符时(比如<table><tr><td>abc一二三(此处含有不可见字符)四</td></tr></table>),会导致这个jsp页面成为空白页面:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link class="component" href="/XxxWeb/a4j/s/3_3_0.GAorg/richfaces/renderkit/html/css/basic_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf" rel="stylesheet" type="text/css" /><link class="component" href="/XxxWeb/a4j/s/3_3_0.GAorg/richfaces/renderkit/html/css/extended_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf" media="rich-extended-skinning" rel="stylesheet" type="text/css" /><link class="component" href="/XxxWeb/a4j/s/3_3_0.GAcss/toolBar.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf" rel="stylesheet" type="text/css" /><script type="text/javascript">window.RICH_FACES_EXTENDED_SKINNING_ON=true;</script><script src="/XxxWeb/a4j/g/3_3_0.GAorg/richfaces/renderkit/html/scripts/skinning.js.jsf" type="text/javascript"></script>

往下就没有了,而如果是正常的话,下面应该还有内容!

请问,这个与什么相关?jsp?jsf?jstl?还是richfaces?给一个思路吧,谢谢了!
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
magong 2011-05-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 micro2000 的回复:]

因为showdata中的是table,需要其以table的方式展现数据;
escape="true"的情况下是可以显示的。
[/Quote]
dataTable 不好用么?escape="false"总是不安全的。

一定要用的话,就避免特殊字符,你需要细心甄别除开<>之外还有哪些字符会引起麻烦,不要出现这些字符。

“乱码”在当前字符集中没有字符对应的时候,就是显示?号,这问题不大。“乱码”在当前字符集中碰巧有</>等字符对应(如UTF-8编码被当成GBK或ISO8859解析就有这种可能),那就相当不幸了。
micro2000 2011-05-29
  • 打赏
  • 举报
回复
问题没有解决,请继续帮忙出主意,分析。
micro2000 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 magong 的回复:]

楼主为什么要禁止escape呢。showdata中有特殊字符自然会扰乱页面处理过程。
将escape="false"去掉试试看。
[/Quote]

因为showdata中的是table,需要其以table的方式展现数据;
escape="true"的情况下是可以显示的。
magong 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 micro2000 的回复:]
<h:outputText escape="false" value="#{DataAction.showdata}"/>
[/Quote]
楼主为什么要禁止escape呢。showdata中有特殊字符自然会扰乱页面处理过程。
将escape="false"去掉试试看。
micro2000 2011-05-27
  • 打赏
  • 举报
回复
补充:

整个过程没有报错;

并且,如果我在jsp中期望截获错误:

<c:catch var="errMsg">
<h:outputText escape="false" value="#{DataAction.showdata}"/>
</c:catch>
<c:out value="${errMsg}"/>

现象依旧!!!
micro2000 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lffsonic 的回复:]
对JBOSS不熟悉,你看看JBOSS默认的编码格式是什么,看是不是和页面GBK一样
[/Quote]

抛开JBOSS,如果发生此问题,应该从哪儿查起?

包含不可见字符的内容是用jxl从excel中读出来的,现在做的是将其显示在页面上。
lffsonic 2011-05-27
  • 打赏
  • 举报
回复
对JBOSS不熟悉,你看看JBOSS默认的编码格式是什么,看是不是和页面GBK一样

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧