2011-08-17 41 views
0

最近我注意到,提交表单的所有操作都需要执行两次才能实际提交值。之前这工作得很好,当我硬编码由我的支持豆产生的行动路径,但自从我开始解决所有的行动路径通过faces-config奇怪的事情已经开始发生。有一件事是我需要按两次提交按钮才能触发操作,浏览器会触发POST。我可以在萤火虫中看到两个POST被触发,而最后一个被Glassfish处理。需要提交表单两次才能处理?

不知道这是否是我遇到的问题的副作用。但很多时候,当我做转发页面丢失CSS类和东西开始看起来丑陋,并且一些组件(Richfaces - datatable)开始渲染不好。其实我必须做重定向大部分时间才能正确呈现内容。

  1. 在Glassfish服务器处理请求之前,我需要做两个POST /提交的原因是什么?
  2. 为什么我经常需要重定向以使组件(Richfaces)正确呈现?

我用:

  • Glassfish的3.1
  • 的NetBeans 7.0.1
  • RichFaces的4.0决赛我的面孔,配置的

样品;

<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> 

Firebug的日志 -

的第一篇文章(提交时不工作)

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 

第二支柱(正常工作的那个)

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 
+0

有时,POST会排队等候原本应该发生的事情,并且下一个操作GET/POST将不会是当前操作,直到我再次按下按钮/ commandlink。 – Chris

回答

3

这听起来像你已经映射到多个URL的模式FacesServlet并以某种方式全部自动生成的URL CSS和JS资源变得无效。对JSF生成的HTML源文件中的<link><script> URL和例如Firebug的HTTP流量进行一些基本的调试和调查,应该给很多的深入了解。你应该已经看到了这些CSS/JS资源的404。由于在你的问题中缺少这种简单的调试信息,我无法回答任何建议尝试在单个URL模式上明确地映射FacesServlet的任何其他内容,例如, *.xhtml

+0

嗨,Firebug在请求期间不会发出任何错误,对于CSS。我的CSS都有状态304 - 未修改。但是我的rich:dataTable不能正确渲染,接缝是在我做了重定向之后,但不确定。也许它与*一般的导航规则。试图省略*,这意味着相同。但结果相同。想想我会再次重新编写我的结果路径,只是为了确保没有其他的东西。感谢提示。 – Chris

+0

没有帮助硬编码bean类中的所有路径。和以前一样。任何想法接下来要尝试什么,可能会删除domain1或将所有内容都移动到新项目中? – Chris

+0

BalusC;增加了萤火虫调试信息。对我来说,这一切看起来非常相似,但我没有豆浏览/阅读许多http日志。 – Chris