我不得不更改< script>在JSF页面中的< / script>
并尝试评估脚本内部的JSF组件。评估了EL,但标签本身没有受到影响。
这种行为的原因是什么?


示例:


 < script type =“text / javascript”>
 //<![CDATA [
 function doSomething(){
 $('。userNode')。droppable({
 activeClass:'ui-state-active',
 hoverClass:'ui-state-highlight',
 tolerance:'intersect',& #xA; drop:function(event,ui){
< h:panelGroup rendered =“#{myBean.useThis}”>
 alert(“code A”);
< ; / h:panelGroup>
< h:panelGroup rendered =“#{!myBean.useThis}”>
 alert(“code B”);
< / h:panelGroup&gt ;
}
});
 };
 //]] GT; < / script>



 EL #{!myBean.useThis}
评估为true / false但是< h:panelGroup>
是渲染的结果。
为什么?

答案 0 :(得分:4)
这是因为你把它放在CDATA块里面。 CDATA块中的任何内容都被视为字符数据,而不是XML数据。
最好不要这样做。这是一种糟糕的做法。将JS函数放在自己的.js
文件中。仅使用JSF / EL来准备JS函数然后要求的JavaScript变量(作为方法参数)或单独访问(在窗口范围内),而不是填充JS函数的部分。
E.g。
<h:outputScript>var useThis = #{myBean.useThis};</h:outputScript>
<h:outputScript name="script.js" />
function doSomething() {
$('.userNode').droppable({
activeClass : 'ui-state-active',
hoverClass : 'ui-state-highlight',
tolerance : 'intersect',
drop : function(event, ui) {
if (useThis) {
alert("code A");
}
else {
alert("code B");
}
}
});
}
为防止污染全局范围,请考虑创建命名空间。
<h:outputScript>var my = my||{}; my.useThis = #{myBean.useThis};</h:outputScript>
if (my.useThis) {
alert("code A");
}
else {
alert("code B");
}