【问题标题】:Trigger/Simulate Click Event Programmatically via ClientListerner通过 ClientListerner 以编程方式触发/模拟 Click 事件
【发布时间】:2015-10-30 19:27:32
【问题描述】:

到目前为止,通过遵循文档,我已经设法使按钮的单击事件正常工作。我现在正在努力以编程方式触发 ADF 组件的点击事件。

源码如下:

<af:showDetailItem id="pane1" text="Panel Label 1" disclosed="true">
    <af:commandButton text="commandButton 1" id="cb1">
        <af:clientListener method="showNext" type="action" />
    </af:commandButton>
</af:showDetailItem>

<af:showDetailItem id="pane2" text="Panel Label 2">
    <af:commandButton text="commandButton 2" id="cb2">
        <af:clientListener method="showNext" type="action" />
    </af:commandButton>
</af:showDetailItem>

<af:showDetailItem id="pane3" text="Panel Label 3">
    <af:commandButton text="commandButton 3" id="cb3">
        <af:clientListener method="showNext" type="action" />
    </af:commandButton>
</af:showDetailItem>

Javascript

function showNext(evt){        
   var src = evt.getSource();
   var showDetailItemNode = src.getParent(); // targets the showDetailItem tag     
   /* how do I trigger the click event of this node */
}

所以基本上我想要实现的是,当点击按钮#cb1时,我想模拟showDetailItem #pane1的点击事件等等......

【问题讨论】:

  • 如何编写 JavaScript 取决于 HTML DOM 树(你可能已经知道,JS 运行在 webbrowser 中,而不是 webserver 中)。很少有人使用 Oracle ADF,但很少有人会自己尝试或从头顶告诉上面发布的 XHTML 生成的 HTML 输出的样子。其他人对安装 Oracle ADF 只是为了弄清楚实际生成的 HTML 输出不感兴趣。换句话说,如果您包含生成的 HTML 输出,或者完全重新构建问题以将 HTML 包含在真正的 MCVE 风格中并重新定位[html] 用户,您就有更多机会获得答案。
  • @BalusC 够公平的。但我认为在生成的 HTML 上使用 javascript 并不是最好的做法(即使它可以完成这项工作),因为 ADF 有自己推荐的处理客户端交互的方式。在生成的 HTML 上使用 javascript 是一种选择,我可以自己做,但我不想遵循 ADF 文档中给出的方法;即,通过使用clientListener 标签。
  • 不确定这是否是答案,因为我对 ADF 一无所知,更不用说它生成的 HTML 输出了,但这可能是朝着正确方向的有用提示:如果有问题的 HTML DOM 元素有一个 @ 987654325@ 属性,那么您可以通过 element.onclick() 触发它。或者,如果您想模拟鼠标单击 HTML DOM 元素,则只需执行 element.click(),这将触发其 onclick(如果有),然后根据其返回值在 DOM 树中冒泡。跨度>
  • 很遗憾,我无法得到我想要的答案。下面的所有答案都指向正确的方向,但我只在寻找客户端解决方案,即;不使用 bean....
  • 客户端解决方案需要了解客户端模型和视图。 IE。如我的第一条评论所示,生成的 MVCE 风格的 HTML 输出。可惜你没有早点看到/理解它。

标签: javascript jsf oracle-adf


【解决方案1】:
<af:serverListner> 

是一个标签,您可以与&lt;af:clientListner&gt; 一起使用来将您的事件传播到您的托管bean。此外,您还可以将上述标签与&lt;af:showDetailItem&gt; 相关联。希望对您有所帮助。

【讨论】:

【解决方案2】:

【讨论】:

    【解决方案3】:

    您可以循环浏览手风琴组件的子组件以找出当前公开的 showDetailItem。 然后将那个设置为 hidden=false 并将下一个设置为 true。

    【讨论】:

    • 但是你如何循环浏览它们?
    • 在托管 bean 中,您可以获得对手风琴组件的引用,并使用该组件的 getChildren() 方法来找出其中包含哪些组件。
    猜你喜欢
    • 2022-12-11
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多