Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用jsf-2将javascript代码封装在复合文件中_Javascript_Jsf 2_Encapsulation - Fatal编程技术网

用jsf-2将javascript代码封装在复合文件中

用jsf-2将javascript代码封装在复合文件中,javascript,jsf-2,encapsulation,Javascript,Jsf 2,Encapsulation,我问了这个问题,但它作为一个副本关闭了,并有一个指向这个答案的链接 也许在我的问题中,我没有充分说明我想做什么: 我想有一个复合的内部结构可能会改变在未来的版本。我希望这个组合有一个javascript函数,可以从外部调用该函数来处理所有内部细节,封装在组合中,外部没有代码部分 <h:form onload="this.myfunc=function(){alert('Hello world');}" ... 首先 通过提供ID调用复合组件: <core:yourComposite

我问了这个问题,但它作为一个副本关闭了,并有一个指向这个答案的链接

也许在我的问题中,我没有充分说明我想做什么: 我想有一个复合的内部结构可能会改变在未来的版本。我希望这个组合有一个javascript函数,可以从外部调用该函数来处理所有内部细节,封装在组合中,外部没有代码部分

<h:form onload="this.myfunc=function(){alert('Hello world');}" ...
首先

通过提供ID调用复合组件:

<core:yourComposite id="someId" .../>

第二

在h:form属性上添加
prependId=false
,以防止自动id,并为该表单提供
id

现在您可以检查呈现的html,您将看到具有映射语义id的表单,如:
someId:formId
现在您可以在表单中插入脚本调用:


getElementById('#{cc.attrs.id}:formId')
在HTML中非常正常

在解析完end标记后,元素才在DOM中可用。确保脚本在
之后运行。我建议通过一些不错的HTMLDOM/JS教程来掌握它的基本概念。@BalusC是的,这是我的一个错误。但是将h:outputScript放在表单后面并没有多大帮助。“this”仍然是窗口,只要我没有(未完成的)父节点或其他东西开始,我就不能使用previousSibling。或者有没有一种方法(简单)可以访问树中的最后一个节点,不管它嵌套在哪里?(我可以进行迭代,但这看起来太过分了。)只需按id获取元素?@BalusC我怎么知道id?jsf在它前面加了一些东西。糟糕的建议。首先,
prependId=“false”
在JSF2中是不好的做法,正如注释和副本中指出的那样,只需使用
{cc.clientId}
。其次,如果OP的另一个错误被详细指出也很好(
{cc.attrs.id}
方法是胡说八道)。@BalusC:从你的评论中可以看出:“其次,如果OP的另一个错误被详细指出也很好({cc.attrs.id}方法是胡说八道)。“如果是这样,你为什么不愿意提及?
<composite:implementation>
    <h:form id="${cc.attrs.imgId}" styleClass="small">
        <f:event type="postAddToView" listener="#{mBean.register}" />
        <f:attribute name="myId" value="hmta${cc.attrs.imgId}" />
        <h:graphicImage width="${cc.attrs.width}" id="${cc.attrs.imgId}"
            onclick="this.nextSibling.value=mods(event)" onmouseover="aa=this.id"
            value="images/img?#{cc.attrs.flav}=#{Math.random()}">
            <f:ajax event="click" execute="@this k"
                listener="#{mBean.handleEvent}" render="@this">
            </f:ajax>
        </h:graphicImage>
        <h:inputHidden id="k" value="#{mBean.keyX}" />
    </h:form>
    <h:outputScript>window.document.getElementById('#{cc.clientId}:#{cc.attrs.imgId}').myfunc=function() {alert("newly called"+#{mBean.keyX})};</h:outputScript>
</composite:implementation>
<core:yourComposite id="someId" .../>