【问题标题】:Need to submit forms twice to be processed?需要提交两次表格以进行处理?
【发布时间】:2011-10-28 17:42:55
【问题描述】:

最近我注意到提交表单的所有操作都需要执行两次才能实际提交值。在此之前,当我从我的支持 bean 对生成的操作路径进行硬编码时工作正常,但自从我开始通过 faces-config 解析所有操作路径后,奇怪的事情开始发生。一件事是我需要按两次提交按钮来触发操作,浏览器触发 POST。我可以在 firebug 中看到两个 POST 被触发,只有最后一个被 Glassfish 处理。

不知道这是否是我遇到的问题的副作用。但是很多时候,当我执行 forward 时,页面会丢失 CSS 类并且事情开始变得难看,并且一些组件(Richfaces - 数据表)开始呈现糟糕的状态。实际上,我大部分时间都必须进行 redirect 才能正确渲染。

  1. 在 Glassfish 服务器处理请求之前我需要执行两次 POST/提交的原因是什么?
  2. 为什么我经常需要重定向才能使组件(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


【解决方案1】:

听起来您已经在多个 URL 模式上映射了 FacesServlet,并且在某种程度上,所有自动生成的指向 CSS 和 JS 资源的 URL 都变得无效。对 JSF 生成的 HTML 源代码中的 &lt;link&gt;&lt;script&gt; URL 以及例如 Firebug 的 HTTP 流量进行一些基本的调试和调查,应该很多了解究竟是什么坏了。您应该已经看到那些 CSS/JS 资源的 404。

由于您的问题中缺少这个微不足道的调试信息,因此除了建议尝试将 FacesServlet 显式映射到单个 URL 模式(例如*.xhtml.

【讨论】:

  • 嗨,对于 CSS,Firebug 在请求期间不会发出任何错误。我的 CSS 都有状态 304 - 未修改。但是我的 rich:dataTable 没有正确渲染,接缝是在我完成重定向之后,但不确定。也许它是带有 * 的一般导航规则。试图省略*,它的意思是一样的。但同样的结果。我想我会再次硬编码我的结果路径,只是为了确保它没有别的。感谢您的提示。
  • 对 bean 类中的所有路径进行硬编码无济于事。和以前一样。知道接下来要尝试什么,可能删除 domain1 或将所有内容移到新项目中?
  • BalusC;添加了萤火虫调试信息。对我来说,这一切看起来都非常相似,但我没有 bean 浏览/阅读那么多 http 日志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多