从复合组件执行JavaScript

从复合组件执行JavaScript,javascript,jsf,google-maps,composite-component,Javascript,Jsf,Google Maps,Composite Component,你好,我有一个问题已经困扰了我几个小时了。这很直截了当。我尝试在呈现复合组件时调用/执行JavaScript。就像你可以用html标记体和onload做的一样 如何引用要执行的内联JavaScript <cc:implementation> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <script type="text/javascript" src=

你好,我有一个问题已经困扰了我几个小时了。这很直截了当。我尝试在呈现复合组件时调用/执行JavaScript。就像你可以用html标记体和onload做的一样

如何引用要执行的内联JavaScript

<cc:implementation>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false" />
    <div id="#{cc.clientId}" >

        <div id="map_canvas" style="width: 850px; height: 350px; padding: 1px; border: darkblue" />

        <script>init();</script>

        <script type="text/javascript">
            var map = null;
            function init() {
                var latlng = new google.maps.LatLng(51.5001524, -0.12623619);
                var myOptions = {
                    zoom: 7,
                    center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
            }
        </script>
    </div>
    </cc:implementation>

init();
var-map=null;
函数init(){
var latlng=新的google.maps.latlng(51.5001524,-0.12623619);
变量myOptions={
缩放:7,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
}
我试过使用这个.init(),#{cc.clientId}.init()。但是在上下文中找不到JS。如果我从JSF/ajax组件执行它,它只需“init();”

在定义函数之前调用
init()

<script type="text/javascript">
    var map = null;
    var latlng = new google.maps.LatLng(51.5001524, -0.12623619);
    var myOptions = {
        zoom: 7,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
</script>
将调用放在函数定义之后

<script type="text/javascript">
    var map = null;
    function init() {
        var latlng = new google.maps.LatLng(51.5001524, -0.12623619);
        var myOptions = {
            zoom: 7,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    }
</script>
<script>init();</script>

在定义函数之前,您正在调用
init()

<script type="text/javascript">
    var map = null;
    var latlng = new google.maps.LatLng(51.5001524, -0.12623619);
    var myOptions = {
        zoom: 7,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
</script>
将调用放在函数定义之后

<script type="text/javascript">
    var map = null;
    function init() {
        var latlng = new google.maps.LatLng(51.5001524, -0.12623619);
        var myOptions = {
            zoom: 7,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    }
</script>
<script>init();</script>


当我将JS放在单独的文件中并将其包含在标记中时,它也可以正常工作。为什么要在函数定义中单独的
中调用“init()”?它应该在同一个
中,并且在函数定义之后。当我将JS放在单独的文件中并将其包含在标记中时,它也可以正常工作。为什么在函数定义的单独
中调用“init()”?它应该在相同的
中,并且在函数定义之后。谢谢@BalusC。是的,我意识到这是设计缺陷,使用静态名称作为div。但是外部,只要每个表单只有一个组件,就有帮助。稍后尝试重新设计。顺便说一下,我将添加更多的JS函数,所以我尝试在函数中封装变量。因此使用invoke标记。嗯,这不是我最开心的一天,谢谢你的提示。不,外太空舱的ID对我没有任何帮助。HTML不是JSF。HTML不会像JSF对
NamingContainer
中的组件那样预先添加嵌套组件的ID或其他内容。因此,不能为复合组件提供ID=“someID”。所以,如果你需要在同一页面上有多个相同的CC,那么最好用ID将它们包装在面板中?!不,那不是真的。JSF不会更改普通HTML元素的ID/在其前面添加ID。它们将按原样打印以响应。JSF只会更改/预先添加真实JSF组件的ID。如果将
替换为
,那么JSF将自动使用
{cc.clientId}
对其进行预处理。谢谢@BalusC。是的,我意识到这是设计缺陷,使用静态名称作为div。但是外部,只要每个表单只有一个组件,就有帮助。稍后尝试重新设计。顺便说一下,我将添加更多的JS函数,所以我尝试在函数中封装变量。因此使用invoke标记。嗯,这不是我最开心的一天,谢谢你的提示。不,外太空舱的ID对我没有任何帮助。HTML不是JSF。HTML不会像JSF对
NamingContainer
中的组件那样预先添加嵌套组件的ID或其他内容。因此,不能为复合组件提供ID=“someID”。所以,如果你需要在同一页面上有多个相同的CC,那么最好用ID将它们包装在面板中?!不,那不是真的。JSF不会更改普通HTML元素的ID/在其前面添加ID。它们将按原样打印以响应。JSF只会更改/预先添加真实JSF组件的ID。如果您将
替换为
,那么JSF将自动使用
{cc.clientId}
对其进行预处理。