如果从同一数据表的记录触发Ajax刷新数据表失败?

时间:2011-05-09 10:49:52

标签: jsf jsf-2 primefaces

我想实现这个目标:

在我的数据表中,在其中一个单元格中,我可以通过单击commandLink来触发可以刷新数据表本身的操作。

但我所经历的是:

触发操作后,一切都按预期工作,但只缺少一件事,也就是说,它不会刷新数据表。


我的摘录是这样的链接(是的,我知道使用@all不是一个好主意,但这是出于测试目的):

<p:column>
    <p:commandLink value="Undo"
        process="@all"
        action="#{tInputBean.undoRemoveRecord(rpbDetail)}" 
        update="@all"
        rendered="#{tInputBean.isRemoveRecord(rpbDetail)}"
    />
</p:column>

我进一步测试,在数据表的标题面内放置一个按钮,除了刷新网格之外什么都不做:

<p:commandButton value="Refresh Data" update="gridRPBDetails" />

所以步骤已成为:

  1. 点击链接后,网格不会刷新。
  2. 单击刷新按钮实际刷新网格,链接消失(因为呈现的属性),这意味着,我的JSF Bean中的所有阶段和状态已经正确。只有刷新视图阶段失败。

  3. 我想要达到的目标很简单:单击链接,链接本身会刷新并消失(从呈现的属性中)

    在我看来,根据我的测试,结论是:任何可以触发操作并刷新包含该记录的网格的记录都将在刷新阶段失败。

    有什么想法可以解决这个问题吗?


    无论如何,我想在点击firebug中的“撤消”链接后分享回复:

    <?xml version='1.0' encoding='UTF-8'?>
    <partial-response><changes><update id="javax.faces.ViewState"><![CDATA[673421645734309925:-3805206326573204566]]></update></changes><extension primefacesCallbackParam="validationFailed">{"validationFailed":false}</extension></partial-response>
    

    我正在使用tomcat 7,这些是我的依赖项:

    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.0.4-b09</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.0.4-b09</version>
        <scope>compile</scope>
    </dependency>
    

    更新:


    我意识到这篇文章没有一个简单的例子,并且很难测试和解释,因此,我做了一个简单的例子,我发布了here

    如果主持人认为应该删除此帖子并且这样做,那就没关系。

    谢谢!

1 个答案:

答案 0 :(得分:0)

您在哪里更新记录?只需输入流程和更新即可。除此之外不要使用@all。如果您的数据表已经在表单中,则不会在@all情况下更新。使用@this。

我想帮助你,但我不知道你在后端想做什么。为了刷新数据表,您需要具有处理刷新的动作侦听器或操作属性。那么另一个问题是你的bean的范围是什么?如果其会话作用域,那么您需要更改它以查看范围。

将您的代码放在这里,然后我可以更好地解释它。