【问题标题】:JSF Primefaces TabView problemsJSF Primefaces TabView 问题
【发布时间】: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>

【问题讨论】:

    标签: jsf primefaces


    【解决方案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 不能按类更新

      【讨论】:

        猜你喜欢
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 2014-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多