【发布时间】:2014-01-22 18:44:16
【问题描述】:
单击命令按钮应触发 ManagedBean 中的操作:将新的“outputText”组件添加到当前页面。
总体思路是通过用户操作动态更改页面,使用服务器端操作,因为添加到页面的新元素需要布局数据库中的数据。
-> 如何从 jsf / primefaces 中的托管 bean 向页面添加组件?假设应该将元素添加到现有的 div 中,例如:
<div id="placeHolder">
</div>
(如果需要,此 div 可以更改为 jsf 面板)
注意:如果替代方法能更好地达到相同的效果,我很乐意了解它们。
【问题讨论】:
-
是的,使用 primefaces 面板 (p:panel)。开始看一些基础教程。
-
你可以把所有的元素都设置成render=false。执行操作时,将 bool 元素更改为 true。
-
@StarsSky 所说的是迄今为止最简单的方法。使组件在开始时不被渲染。当用户单击按钮时,如果需要,从 db 加载任何信息。更新一些包含 outputText 本身的元素并将其设置为渲染后。您可以只使用一个条件:
rendered="#{not bean.buttonClicked}"。 -
谢谢,但那行不通。我需要渲染不确定数量的组件 - 可能很多,而且我不知道提前多少。似乎我需要一个程序化的解决方案。 @Makky,我找不到有关如何在页面上以编程方式添加组件的基本教程。
-
没有添加组件的通用方法。例如,InputText 扩展到 UIInput,而 OutputLabel 扩展到 UIOutput。您不能拥有通用组件的列表。除了@XtremeBiker 指定之外,我想不出任何其他解决方案
标签: jsf jsf-2 primefaces