【问题标题】:Can I trigger an IceFaces action using JavaScript?我可以使用 JavaScript 触发 IceFaces 动作吗?
【发布时间】:2011-04-15 17:52:19
【问题描述】:

如果我有一个简单的按钮:

   <ice:panelGroup> 
            <ice:commandButton value="foobar" 
            action="#{fileManager.openNoFlashVisiblePopup}" />
   </ice:panelGroup>

是否可以仅使用 javascript 触发操作 openNoFlashVisiblePopup?我知道 IceFaces 有一个 JavaScript 桥,但我不知道有什么简单的方法可以做到这一点。

我需要这样做,因为我有一个检测 Flash 的 JavaScript 块,我需要显示一个 IceFaces 弹出窗口。

【问题讨论】:

    标签: java javascript jsf icefaces


    【解决方案1】:

    我知道我看到这个有点晚了,但是处理这个的正确方法(减去可能过于繁琐的错误检查)是:

            // There's a <div> that looks like: <div class="portletfaces-bridge-body" id="A8660">.
        // We'll find it and pull out the value of the ID to build elementId like: A8660:wtfForm:editeventparent
        var div = null; 
        var divCollection = document.getElementsByTagName("div");
        for (var i=0; i<divCollection.length; i++) {
            if(divCollection[i].getAttribute("class") == "portletfaces-bridge-body") {
                div = divCollection[i];
                break;
            } 
        }
        if (div == null){
            alert("could not find div portletfaces-bridge-body.");
            return;
        }
    
        // Pull the id out of divInnerText.
        var id = div.getAttribute("id");
        if (id == null){
            alert("id was null");
        }
    
        // prepare initializes fields to null so rendered cannot begin until both itemId and parentId are set.
        var prepare = document.getElementById(id + ":wtfForm:editeventprepare");
        if (prepare == null){
            alert("editeventprepare element was not found.");
            return;
        }
        prepare.click();
    

    【讨论】:

      【解决方案2】:

      一种方法是通过 ID 获取按钮元素并调用其click() 函数。

      document.getElementById('clientId').click();
      

      你只需要给表单和按钮一个固定的id,这样你就可以在Javascript代码中使用生成的HTML ID作为clientId

      【讨论】:

      • 没错,这会起作用,但我暂时创建了打开弹出窗口的按钮 - 否则我不需要它...我可以使按钮不可见并以这种方式触发它,但我可以这样做这个没有按钮?此外,我无法控制按钮的 ID,因为 IceFaces 动态生成它并使用它的唯一 ID 来实现其机制。
      • 您可以使用 CSS 隐藏按钮。不,您不能在没有 JSF UICommand 组件的情况下调用 JSF 操作。至于身份证,你看我回答的最后一句话了吗?只需给表单和按钮一个固定的 ID。然后 JSF 不会自动生成它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2015-03-15
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      相关资源
      最近更新 更多