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" />
<h:commandLink>
<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 问题的主要内容,如果未能解决你的问题,请参考以下文章
动态 TabView primefaces,选项卡渲染属性不起作用
数据未显示在由 viewscope spring bean 管理的 Primefaces 选项卡中