JSF Primefaces TabView 问题

Posted

技术标签:

【中文标题】JSF Primefaces TabView 问题【英文标题】:JSF Primefaces TabView problems 【发布时间】:2012-02-28 18:28:30 【问题描述】:

我在 PF 论坛上问过这个问题,但似乎没有人愿意回答,所以我想在这里碰碰运气。

我有一个 ui:repeat 在 TabView 中的 Ajax 调用后没有正确更新。

简单的场景是我有一个 ui:repeat 指向一个 ArrayList(ArrayList 包含带有字符串的简单 pojos)。在此我有一个 h:inputText,其值为 pojo 的 String getter/setter。 ui:repeat 包含在 h:panelGroup 中。我使用 p:commandButton 来运行更新 ArrayList 的操作(只需将几个对象添加到 String 的 Math.random 值),然后更新 h:panelGroup。 ArrayList 中的更新值未反映在 ui:repeat 输入字段中。这似乎只会影响输入字段,因为 outputText 字段确实会正确更新。此外,如果我对 p:dataTable 执行相同操作,则输入字段将正确更新。如果我删除 Tabview 和 Tab 标签,它可以正常工作。

由于它在删除选项卡时有效,我只能假设这是一个错误,而不是设计成这样工作。如果有人可以请确认是否是这样,或者是否有可行的解决方法。我需要使用 ui:repeat 因为我的字段不是表格格式。这仅在从 PF 2.2 迁移后才发生。我目前正在使用 PF 3.1、Weblogic 10.3.4 和 Mojarra 2.0.4

<p:tabView>
    <p:tab title="Test">

        <h:form prependId="false">

            <p:commandButton id="testStringCheck"
                             value="Test String Check"
                             process="@form"
                             update="testPanel"
                             action="#testBean.generateVOwithRandomStrings">
            </p:commandButton>

            <h:panelGroup id="testPanel" layout="block">
                <ui:repeat value="#testBean.voList" var="entry">
                    <h:outputText value="#entry.randomString"/>
                    <p:inputText style="display:block;"
                                 value="#entry.randomString"
                                 size="15">
                    </p:inputText>
                </ui:repeat>
            </h:panelGroup>

        </h:form>

    </p:tab>
</p:tabView>

【问题讨论】:

【参考方案1】:

作为一种解决方法,我使用了 p:datagrid 而不是 ui:repeat。这实现了我在 ui:repeat 中的外观,所以我很高兴。希望这个错误将在未来的版本中得到修复。

【讨论】:

【参考方案2】:

这是 Primefaces commandButton 中的一个错误。请参阅以下主题:

http://forum.primefaces.org/viewtopic.php?f=3&t=17454

你可以试试替换

<p:commandLink id="testStringCheck" ... update="@form" />

&lt;h:commandLink&gt;

<h:commandLink id="testStringCheck" render="@form"/>

此外,从上面的链接中,有人发布了一个有趣的方法,使您能够正确找到要更新的正确 clientId。

http://paste.kde.org/177698/

【讨论】:

感谢您的回复,但这并没有解决问题。我已经尝试过 h:commandButton 和 pf 版本的链接。 @andyfinch 你试过删除进程属性吗?可能没有必要。 那么它是否默认为表单?即使是这样,我仍然会添加它以提高可读性。【参考方案3】:

临时解决方案:插入外部 h:panelGroup:

<p:outputPanel defered="true" delay="1" ..> 

并更新 outputPanel 而不是 panelGroup

或者使用 datalist 组件代替 ui:repeat。

还有一个,我不确定,但你可以试试,所以更新类而不是 id:

<h:panelGroup id="testPanel" layout="block" styleClass="testPanelCl" ../>

更新:@(.testPanelCl),别忘了 panelGroup 的 id,没有 id JSF 不能按类更新

【讨论】:

以上是关于JSF Primefaces TabView 问题的主要内容,如果未能解决你的问题,请参考以下文章

Primefaces TabView 动态

动态 TabView primefaces,选项卡渲染属性不起作用

Primefaces tabview 验证与动态选项卡

数据未显示在由 viewscope spring bean 管理的 Primefaces 选项卡中

修复 p:tabView primefaces 的宽度和高度

Primefaces tabview 设置默认静态选项卡