我在Facelets中弄清楚如何处理EL表达式时遇到了一些麻烦.基本上我有:
<h:outputText id="Prompt"
value="Fobar"
rendered="#{beanA.prompt == true && beanB.currentBase !=null}" />
Run Code Online (Sandbox Code Playgroud)
但我一直在:
错误跟踪[第69行]实体名称必须紧跟实体引用中的"&".
Bal*_*usC 157
Facelets是一种基于XML的视图技术.它&是XML中的一个特殊字符,表示&以;字符结尾的实体的开头.你需要逃避它,这是丑陋的:
rendered="#{beanA.prompt == true && beanB.currentBase != null}"
Run Code Online (Sandbox Code Playgroud)
或者使用and关键字,这是可读性和可维护性的首选:
rendered="#{beanA.prompt == true and beanB.currentBase != null}"
Run Code Online (Sandbox Code Playgroud)
与具体问题无关,当表达式期望已经有布尔结果时,将布尔值与布尔值进行比较几乎没有意义.我摆脱了== true:
rendered="#{beanA.prompt and beanB.currentBase != null}"
Run Code Online (Sandbox Code Playgroud)
除了BalusC的答案之外,使用以下Java RegExp替换&&为and:
Search: (#\{[^\}]*)(&&)([^\}]*\})
Replace: $1and$3
Run Code Online (Sandbox Code Playgroud)
如果在EL表达式中使用> 2个文字,则多次运行此正则表达式替换以查找所有出现的情况.如果你的EL表达式语法不同,请注意用$替换前导#.
| 归档时间: |
|
| 查看次数: |
103480 次 |
| 最近记录: |