Xpages:如何将事件绑定到计算可见性的按钮

Xpages: How to bind events to a button whose visibility is computed

我正在使用 Xpages,当我将按钮(绑定了简单事件)放在面板中时不会触发,该面板的可见 属性 是在页面加载时计算的。

我怎样才能实现这个目标?

编辑:

我想我应该澄清一下。按住按钮的 div 使用以下方式呈现: facesContext.getMessages().hasNext()。 (这会测试用户是否未通过验证)。

如果我只使用 rendered = true 设置渲染,按钮及其代码就可以正常工作。

谢谢

如果 div 的 属性 renderedfalse 那么完整的标签不会包含在 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>

在这两种情况下,按钮事件都可以被执行。