早前用Primefaces 搭配 Pretty Faces的时候一切运行正常并顺利着。但是最近“屎忽痕”,给自己的工程增加了另一个web 模块的实现,想尝试一下richfaces 4 + pretty faces运行的效果(实际上是看rf4出来了想尝尝鲜),不料代码一起来就杯具了。先记录一下代码结构和类库引用:
浏览器的html输出<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Default title</title>
<link rel="stylesheet" type="text/css"
href="/appollo/style/2c-hd-lc-static-layout" />
<link rel="stylesheet" type="text/css"
href="/appollo/style/2c-hd-lc-static-presentation" />
<link type="text/css" rel="stylesheet"
href="/appollo/rfRes/skinning.ecss.jsf?db=eAHL6rC8BQAEkAIG" />
<link type="text/css" rel="stylesheet"
href="/appollo/rfRes/panel.ecss.jsf?db=eAHL6rC8BQAEkAIG&ln=org.richfaces" />
</head>
<body>
<div id="header">
<h3>xXx</h3>
</div>
<div id="leftColumn">
<div class="rf-p " id="j_idt13">
<div class="rf-p-b " id="j_idt13_body">navigator</div>
</div>
</div>
<div id="content">
<div id="contentBody">
<div class="rf-p " id="j_idt16">
<div class="rf-p-b " id="j_idt16_body">内容</div>
</div>
</div>
</div>
</body>
</html>
乍看这跟rf 样式表和客户端脚本的输出跟primefaces的输出方式如出一辙,浏览器最终都是通过一个jsf请求向服务器端索取css/javascript。但是出来的效果却相去甚远。
在上文的html中,浏览器无法找到richfaces输出的样式和脚本。通过请求"#{request.contextPath}/appollo/rfRes/skinning.ecss.jsf?db=eAHL6rC8BQAEkAIG"得到的是一个glassfish的http 500错误页。
下文代码段是从html输出里面截出的两段样式引用。前者的"href"是我通过在pretty-config.xml里面配置的url mapping所得的,后者是rf的输出。
<link rel="stylesheet" type="text/css"
href="/appollo/style/2c-hd-lc-static-presentation" />
<link type="text/css" rel="stylesheet"
href="/appollo/rfRes/panel.ecss.jsf?db=eAHL6rC8BQAEkAIG&ln=org.richfaces" />
经过仔细检查配置和库引用,始终没有发现问题所在。Google了关于rf4 和 prettyfaces的不兼容信息,除了找到了fileupload会存在一点问题以外,几乎找不到负面的消息。
最后只好慢慢回头研读pretty faces的配置设置。最后在文档里发现了如下一段……
我用的容器是glassfish 3.1,兼容servlet 3.0。红字部分是我第一次看的时候直接跳过的。於是就“傻耕耕”噉將嗰段咁嘅死人code paste咗落個web.xml度。
我果断将web.xml里面这段代码删除,重新打包部署运行,结果自然就是马到功成了。
虽然我还没搞清楚贴上这段代码与否会有什么影响,但事实上的确是有错误产生了。However,知其然不知其所以然总比乃不知其然好。先凑合着玩吧~~
Good night~2 myself~~~~