<p:dialog>的rendered和visible属性之间有什么区别?

17

我在我的项目中使用PrimeFaces 3.2。我想知道将<p:dialog>rendered属性设置与将visible属性设置有何区别。 我应该何时使用这些属性?

2个回答

32
rendered 属性是服务器端属性,而 visible 属性是客户端属性。 rendered 属性告诉JSF是否应该生成对话框的HTML表示形式。 visible 属性则告诉HTML / CSS / JS是否应该立即在浏览器页面加载时显示对话框。

如果未呈现对话框,则您将无法通过例如JavaScript dialogWidgetVar.show() 显示它,除非重新加载页面或ajax更新其中一个对话框的父组件,以使对话框的 rendered 条件评估为true。同样,如果对话框未呈现,则 visible 属性将不起作用,因为没有任何正在呈现到结果HTML输出的内容可以被JavaScript显示/隐藏。

如果已呈现对话框,则默认情况下会隐藏。您可以将 visible 设置为 true,以强制在打开页面时立即显示对话框。或者,您可以在某个 onclickoncomplete 属性中调用 JavaScript dialogWidgetVar.show() 来显示它。

如果您不想完全呈现对话框,则使用 rendered 属性,例如,因为在当前请求的页面构成中根本不会使用它。


我也在考虑那些功能方面的问题,但是一直无法理解。谢谢你的解释,现在我明白了。 - Nick Rolando
@BalusC 我有一个问题。在Richface rich:modalPanel中,如果我将modalPanel render设置为true,那么它会在屏幕上显示一个modelpanel。这很好。 但是,同样的事情我尝试用Primefaces p:dialog实现。 它没用,所以我用visible标签替换了rendered,对于p:dialog来说它工作得很好。 我不明白为什么在这种情况下,rendered不能为primefaces dialog工作,却可以为richfaces modelpanel工作得很好。 - Jimit Tank
@Jimit:PF对话框的visible属性在RF modalPanel中相当于showWhenRendered。显然,您也将其设置为true - BalusC
@Baluc:你好BalusC,关于<p:dialog>,我们能让它响应式吗?请参考这个问题 - Jad Chahine

2

根据那些属性的文档,第3.28节:

rendered: Boolean value to specify the rendering of the component, when set to
          false component will not be rendered [default value: TRUE]
visible:  When enabled, dialog is visible by default [default value: FALSE]

1
可见性:启用时,默认情况下对话框是可见的 [默认值:FALSE]。这有点令人困惑。所以默认情况下它是禁用的,不是可见的? - Nick Rolando
@Shredder 同意,但这是直接来自文档 :S - Óscar López

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接