2012-02-07 101 views
2

我在PF论坛上问过这个问题,但似乎没有人想回答,所以我尽管我会在这里尝试我的运气。JSF Primefaces TabView问题

我有一个用户界面:重复一遍,当它在一个TabView中的Ajax调用后没有被正确更新。

简单的场景是我有一个用户界面:重复指向一个ArrayList(ArrayList包含简单的pojos与一个字符串)。在这里我有一个h:inputText,它的值是pojo的String getter/setter。 ui:repeat包含在h:panelGroup中。我使用p:commandButton来运行一个动作来更新ArrayList(只需向它添加一些对象给该String的Math.random值),然后更新h:panelGroup。 ArrayList中的更新值不反映在ui:重复输入字段中。这只会影响输入字段,因为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> 

回答

0

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

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

你可以尝试更换

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

随着<h:commandLink>

<h:commandLink id="testStringCheck" render="@form"/> 
从这里上面的链接

也就是有人张贴,使一个有趣的方法你要正确地找到正确的clientId来更新。

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

+0

感谢您的回复,但这并未解决问题。我已经尝试过h:commandButton和pf版本。 – andyfinch 2012-02-07 16:11:46

+0

@andyfinch您是否尝试删除进程属性?这可能没有必要。 – 2012-02-07 16:31:26

+0

它是否默认为表单呢?即使这样做,我仍然会将其添加为可读性。 – andyfinch 2012-02-08 08:57:04

1

由于我使用的p解决方法:数据网格,而不是一个用户界面:重复。这实现了我在ui中的表现:重复,让我很开心。希望这个错误将在未来的版本中得到修复。

0

温度溶液:插入外部H:panelGroup中:

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

和更新outputPanel代替panelGroup中

或者使用数据列表组件,而不是用户界面:重复。

一多,我不知道,但你可以尝试,所以更新类,而不是ID:

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

和更新:@(.testPanelCl),不要忘了panelGroup中的ID,不进行身份JSF不能被更新