Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF组件属性中EL中的转义JavaScript引号_Javascript_Jsf_El_Quotes - Fatal编程技术网

JSF组件属性中EL中的转义JavaScript引号

JSF组件属性中EL中的转义JavaScript引号,javascript,jsf,el,quotes,Javascript,Jsf,El,Quotes,我有一个onclick事件,它取决于变量的状态。所以我需要做一些类似的事情 onclick="#{object.isEnabled ? 'ch.my.js_method('#{object.property}'); return false;' : 'return false;'" 问题是,我不能在onclick中使用“。如何转义EL中的引号?您可以使用\或\\转义它们,但每个EL实现的规则不同,因为它在EL规范中并不明确(Oracle的EL impl需要单反斜杠,但Apache需要双反斜杠)

我有一个onclick事件,它取决于变量的状态。所以我需要做一些类似的事情

onclick="#{object.isEnabled ? 'ch.my.js_method('#{object.property}'); return false;' : 'return false;'"

问题是,我不能在onclick中使用
。如何转义EL中的引号?

您可以使用
\
\\
转义它们,但每个EL实现的规则不同,因为它在EL规范中并不明确(Oracle的EL impl需要单反斜杠,但Apache需要双反斜杠)。您需要
+=
操作符来串接EL表达式

<x:someComponent onclick="#{object.isEnabled ? 'ch.my.js_method(\'' += object.property += '\'); return false;' : 'return false;'}" />

最安全的方法是在
的帮助下创建一个别名

例如


如果
#{object.property}
可能包含JS特殊字符,而这些字符又会导致无效的JS输出,例如单引号或换行符,则仍然存在潜在问题。请转到下面的第二个链接以获取解决方案

另见:

我找到了另一个解决方案:只需反转条件,然后添加事件。这样就不需要JS方法的引号:


onclick=“#{object.isEnabled=='false'?'返回false;”:“}ch.my.js_方法('.{object.property}');返回false;”

控制台中是否有错误?问题是合理的,但您使用的是卷曲引号而不是直引号。在真实代码中也是这样吗?这只不过是在问题中引入了一条红线。仔细看看你刚才在这里发布的代码。
'
'
之间的区别非常明显。属性值周围的双引号甚至无效,因为它们是卷曲的而不是直的。代码通常只接受直接引号。这只是键入时的一个错误:在源文件中,我使用了直接引号。但是,它不起作用……不,没有控制台错误,但在解析xhtmlThe时出错转义不起作用。错误:
ReferenceError:左侧的赋值无效
具有别名的版本也无效<代码>语法错误:缺少:在条件表达式中…ch.my.js_方法('343556');返回false;:'返回false看起来onclick事件周围的引号丢失了…我刚刚忘记了一个
}
。答案已经确定。对不起。只怪堆栈溢出没有在消息编辑器中内置编译器和语法检查器:)
<c:set var="js_method" value="ch.my.js_method('#{object.property}'); return false;" />
<x:someComponent onclick="#{object.isEnabled ? js_method : 'return false;'}" />