JSF组件属性中EL中的转义JavaScript引号
我有一个onclick事件,它取决于变量的状态。所以我需要做一些类似的事情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="#{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输出,例如单引号或换行符,则仍然存在潜在问题。请转到下面的第二个链接以获取解决方案
另见:
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;'}" />