gpt4 book ai didi

javascript - 未在 <script> block 内解析的 JSF 组件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:44:39 25 4
gpt4 key购买 nike

我不得不改变一个<script> ... </script>在 JSF 页面中,并尝试评估脚本内部的 JSF 组件。对 EL 进行了评估,但标签本身未受影响。

这种行为的原因是什么?

例子:

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

EL #{!myBean.useThis}被评估为真/假,但 <h:panelGroup>是渲染的结果。

为什么?

最佳答案

这是因为您将它放在了 CDATA block 中。 CDATA block 内的任何内容都被视为字符数据,而不是 XML 数据。

最好不要这样做。这是一种不好的做法。将 JS 函数放在它自己的 .js 文件中。仅使用 JSF/EL 来准备 JS 函数随后将要求(作为方法参数)或自行访问(在窗口范围内)的 JavaScript 变量,而不是填充部分 JS 函数。

例如

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

另见:

关于javascript - 未在 &lt;script&gt; block 内解析的 JSF 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31653562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com