需要提交表格两次才能处理?

时间:2011-08-17 08:50:14

标签: java jsf java-ee glassfish richfaces

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

不知道这是否是我遇到的问题的副作用。但很多时候,当我执行转发时,页面会丢失CSS类,并且事情开始看起来很丑陋,而且一些组件(Richfaces - datatable)开始渲染得很糟糕。实际上,我必须在大部分时间内进行重定向以便正确呈现内容。

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

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

    Firebug日志 -

    第一次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
    

1 个答案:

答案 0 :(得分:3)

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

由于您的问题中缺少这些微不足道的调试信息,除了建议尝试在单个网址格式上明确映射FacesServlet之外,我无法回答任何其他问题。 *.xhtml