JSF组件未在<script>块中解析

时间:2015-07-27 12:49:38

标签: javascript jsf facelets

我不得不更改&lt; script&gt;在JSF页面中的&lt; / script&gt; 并尝试评估脚本内部的JSF组件。评估了EL,但标签本身没有受到影响。

&#xA;&#xA;

这种行为的原因是什么?

&#xA;&#xA;

示例:

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

EL #{!myBean.useThis} 评估为true / false但是&lt; h:panelGroup&gt; 是渲染的结果。

&#xA;&#xA;

为什么?

&#xA;

1 个答案:

答案 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");
           }

另见: