我注意到在InternetExplorer和Chrome中加载我的页面会触发JSF-Lifecycle最多3次,因为有多个HTTP请求被触发。然而,我的调试输出仅存在于第一个生命周期中。 (对于Firefox,只有一个生命周期)
由于Firefox中没有问题,我认为它不是服务器端问题(附加一个phaselistener 2次可能是一个例子)
因此,Chrome和IE需要进行一些调用,这些调用会导致对某些服务器资源的请求,而实际上并不需要任何人。
最大的问题是:什么类型的组件/标签可能会导致另一个HTTP请求,为什么它在没有这些额外请求的Firefox中工作? 我读到没有url属性的图片标记可能会导致此类行为,因为浏览器再次请求索引文件。但Chrome的网络诊断不会显示任何无效图片,也不会显示任何双重请求其中一个xhtml网站。
IE-示例:
13:56:14,046 INFO [stdout] (http--0.0.0.0-8090-18) -- Started Request --
13:56:14,046 INFO [stdout] (http--0.0.0.0-8090-18) ---- Started RESTORE_VIEW 1 ----
13:56:14,048 INFO [stdout] (http--0.0.0.0-8090-18) ---- Started RENDER_RESPONSE 6 ----
13:56:14,100 INFO [stdout] (http--0.0.0.0-8090-18) xybean constructed
13:56:14,712 INFO [stdout] (http--0.0.0.0-8090-18) -- Finished Request --
13:56:15,106 INFO [stdout] (http--0.0.0.0-8090-10) -- Started Request --
13:56:15,106 INFO [stdout] (http--0.0.0.0-8090-10) ---- Started RESTORE_VIEW 1 ----
13:56:15,108 INFO [stdout] (http--0.0.0.0-8090-10) ---- Started APPLY_REQUEST_VALUES 2 ----
13:56:15,110 INFO [stdout] (http--0.0.0.0-8090-10) ---- Started PROCESS_VALIDATIONS 3 ----
13:56:15,111 INFO [stdout] (http--0.0.0.0-8090-10) ---- Started UPDATE_MODEL_VALUES 4 ----
13:56:15,112 INFO [stdout] (http--0.0.0.0-8090-10) ---- Started INVOKE_APPLICATION 5 ----
13:56:15,114 INFO [stdout] (http--0.0.0.0-8090-10) ---- Started RENDER_RESPONSE 6 ----
13:56:15,115 INFO [stdout] (http--0.0.0.0-8090-10) -- Finished Request --
Firefox中的同一页面调用:
14:03:33,443 INFO [stdout] (http--0.0.0.0-8090-2) -- Started Request --
14:03:33,443 INFO [stdout] (http--0.0.0.0-8090-2) ---- Started RESTORE_VIEW 1 ----
14:03:33,444 INFO [stdout] (http--0.0.0.0-8090-2) ---- Started RENDER_RESPONSE 6 ----
14:03:33,496 INFO [stdout] (http--0.0.0.0-8090-2) xybean constructed
14:03:34,258 INFO [stdout] (http--0.0.0.0-8090-2) -- Finished Request --
答案 0 :(得分:1)
解决方案非常简单:
我宣布了2个favicons:
<!-- For Modern Browsers -->
<link rel="shortcut icon" href="./img/favicons/favicon.png" />
<!-- For everything else -->
<link rel="shortcut icon" href="./img/favicons/favicon.ico" />
web.xml中的我声明我的servlet映射如下:
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
因此,IE和Chrome一直在寻找http://localhost/myApp/faces/img/favicons/favicon.png
并通过这样做来调用servlet。将favicon更改为绝对URL(将面省略)修复了问题。
将Faces Servlet的url-pattern更改为更具体的内容(如*.xhtml
或您想要调用它的任何文件类型)也许是一个好主意。