Xpages:如何将事件绑定到计算可见性的按钮
Xpages: How to bind events to a button whose visibility is computed
我正在使用 Xpages,当我将按钮(绑定了简单事件)放在面板中时不会触发,该面板的可见 属性 是在页面加载时计算的。
我怎样才能实现这个目标?
编辑:
我想我应该澄清一下。按住按钮的 div 使用以下方式呈现:
facesContext.getMessages().hasNext()。
(这会测试用户是否未通过验证)。
如果我只使用 rendered = true 设置渲染,按钮及其代码就可以正常工作。
谢谢
如果 div 的 属性 rendered
是 false
那么完整的标签不会包含在 HTML 发送到浏览器包括所有元素在标签内。这就是为什么您的按钮不存在并且无法触发任何事件的原因。
当您的 div 标签必须隐藏时,将 style="display:none"
添加到呈现的 div 标签。
示例:
<xp:panel
id="panel1">
<xp:this.attrs>
<xp:attr
name="style"
value="display:none"
rendered="#{javascript: ! facesContext.getMessages().hasNext()}">
</xp:attr>
</xp:this.attrs>
<xp:button
value="Test"
id="button1">
</xp:button>
</xp:panel>
如果 ! facesContext.getMessages().hasNext()
为 true
,则呈现包含按钮的不可见 div 标签
<div id="view:_id1:panel1" style="display:none">
<button class="xspButtonCommand" type="button" name="view:_id1:button1"
id="view:_id1:button1">Test
</button>
</div>
否则可见
<div id="view:_id1:panel1">
<button class="xspButtonCommand" type="button" name="view:_id1:button1"
id="view:_id1:button1">Test
</button>
</div>
在这两种情况下,按钮事件都可以被执行。
我正在使用 Xpages,当我将按钮(绑定了简单事件)放在面板中时不会触发,该面板的可见 属性 是在页面加载时计算的。
我怎样才能实现这个目标?
编辑:
我想我应该澄清一下。按住按钮的 div 使用以下方式呈现: facesContext.getMessages().hasNext()。 (这会测试用户是否未通过验证)。
如果我只使用 rendered = true 设置渲染,按钮及其代码就可以正常工作。
谢谢
如果 div 的 属性 rendered
是 false
那么完整的标签不会包含在 HTML 发送到浏览器包括所有元素在标签内。这就是为什么您的按钮不存在并且无法触发任何事件的原因。
当您的 div 标签必须隐藏时,将 style="display:none"
添加到呈现的 div 标签。
示例:
<xp:panel
id="panel1">
<xp:this.attrs>
<xp:attr
name="style"
value="display:none"
rendered="#{javascript: ! facesContext.getMessages().hasNext()}">
</xp:attr>
</xp:this.attrs>
<xp:button
value="Test"
id="button1">
</xp:button>
</xp:panel>
如果 ! facesContext.getMessages().hasNext()
为 true
<div id="view:_id1:panel1" style="display:none">
<button class="xspButtonCommand" type="button" name="view:_id1:button1"
id="view:_id1:button1">Test
</button>
</div>
否则可见
<div id="view:_id1:panel1">
<button class="xspButtonCommand" type="button" name="view:_id1:button1"
id="view:_id1:button1">Test
</button>
</div>
在这两种情况下,按钮事件都可以被执行。