我在PF论坛上问了这个,但似乎没有人愿意回答所以我虽然在这里试试运气。
我有一个ui:在Ajax调用之后,当它在TabView中时,没有正确更新。
简单的场景是我有一个ui:重复指向一个ArrayList(ArrayList包含带有String的简单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>
答案 0 :(得分:1)
作为一种解决方法,我使用了p:datagrid而不是ui:repeat。这实现了我在ui中的外观:重复,所以我很高兴。希望这个错误将在未来版本中修复。
答案 1 :(得分: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进行更新。
答案 2 :(得分:0)
临时解决方案:在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无法按类更新