从复合组件执行JavaScript
你好,我有一个问题已经困扰了我几个小时了。这很直截了当。我尝试在呈现复合组件时调用/执行JavaScript。就像你可以用html标记体和onload做的一样 如何引用要执行的内联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=
<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}
对其进行预处理。