【发布时间】:2011-10-28 17:42:55
【问题描述】:
最近我注意到提交表单的所有操作都需要执行两次才能实际提交值。在此之前,当我从我的支持 bean 对生成的操作路径进行硬编码时工作正常,但自从我开始通过 faces-config 解析所有操作路径后,奇怪的事情开始发生。一件事是我需要按两次提交按钮来触发操作,浏览器触发 POST。我可以在 firebug 中看到两个 POST 被触发,只有最后一个被 Glassfish 处理。
不知道这是否是我遇到的问题的副作用。但是很多时候,当我执行 forward 时,页面会丢失 CSS 类并且事情开始变得难看,并且一些组件(Richfaces - 数据表)开始呈现糟糕的状态。实际上,我大部分时间都必须进行 redirect 才能正确渲染。
- 在 Glassfish 服务器处理请求之前我需要执行两次 POST/提交的原因是什么?
- 为什么我经常需要重定向才能使组件(Richfaces)正确呈现?
我用:
- Glassfish 3.1
- NetBeans 7.0.1
- Richfaces 4.0-final
我的 Faces-config 示例;
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>CreateActivity</from-outcome>
<to-view-id>/app_user/activity/Create.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>CreateActivityDetail</from-outcome>
<to-view-id>/app_user/activity/UpdateDetail.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
萤火虫日志--
第一次 POST(提交时不起作用)
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Faces-Request: partial/ajax
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:8080/humis/faces/app_user/activity/List.xhtml
Content-Length: 430
Cookie: JSESSIONID=cd70a069ad528b3923bd52f12b1c
JSESSIONID=cbe0c977cf1c550f2a57cb4b334f;
treeForm_tree-hi=treeForm:tree:resources:jmsResources:jmsDestinationResources
Pragma: no-cache
Cache-Control: no-cache
第一反应
X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.1 Java/Sun Microsystems Inc./1.6), JSF/2.0
Server: GlassFish Server Open Source Edition 3.1.1
Cache-Control: no-cache
Content-Type: text/xml;charset=ISO-8859-1
Content-Length: 667
Date: Thu, 18 Aug 2011 13:30:22 GMT
第二个 POST(有效的)
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Faces-Request: partial/ajax
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:8080/humis/faces/app_user/activity/List.xhtml
Content-Length: 494
Cookie: JSESSIONID=cd70a069ad528b3923bd52f12b1c;
JSESSIONID=cbe0c977cf1c550f2a57cb4b334f;
treeForm_tree-hi=treeForm:tree:resources:jmsResources:jmsDestinationResources
Pragma: no-cache
Cache-Control: no-cache
第二反应
X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.1 Java/Sun Microsystems Inc./1.6), JSF/2.0
Server: GlassFish Server Open Source Edition 3.1.1
Cache-Control: no-cache
Content-Type: text/xml;charset=UTF-8
Content-Length: 145
Date: Thu, 18 Aug 2011 13:30:44 GMT
【问题讨论】:
-
有时 POST 会排队,这在之前应该发生,并且下一个操作 GET/POST 不会是当前操作,直到我再次按下按钮/命令链接。
标签: java jsf jakarta-ee glassfish richfaces