我正在创建一个JSF Applikation,如果我在EL-Expression中输入拼写错误,我想得到某种警告(最好是我的控制台)。
实施例: 在我的页面上,我想显示一些本地化的文本。 faces-config.xml中的locale-config已正确设置并可与var'msgs'一起使用。
我在我的网页上使用了这段代码:
<h:outputText value="#{msg.title_edit_customer}"/>
当我在浏览器中检查我的页面时,没有显示任何内容。
我花了一段时间才意识到我犯了一个拼写错误 - #{msgs....
它按预期工作了。
我可以激活某种调试输出,所以我可以直接看到某处有无效的EL吗?
我的设置:Eclipse 4.4.2,Tomcat 8,MyFaces 2.2.8
答案 0 :(得分:0)
感谢@ SJuan76,我可以理解:
javax.el.ELResolver
,所有方法都可以返回null / false。 org.apache.myfaces.el.unified.resolver.ScopedAttributeResolver
并复制方法facesContext(ELContext)
和findScopedMap(FacesContext, Object)
(因为ScopedAttributeResolver
是最终的,我们无法扩展它)。 编辑getValue-Method:
@Override
public Object getValue(ELContext context, Object base, Object property) {
if(!context.isPropertyResolved()){
//Douple Check false-positives
boolean foundInScope = false;
final Map<String, Object> scopedMap = findScopedMap(
facesContext(context), property);
if (scopedMap != null) {
Object object = scopedMap.get(property);
if (object != null) {
foundInScope = true;
}
}
if (!foundInScope) {
log.warn(String.format("EL-Property %s couldn't be resolved",
property));
}
}
return null;
}
修改faces-config.xml
以注册您的解析器:
<application>
<el-resolver>com.myPackage.DebugELResolver</el-resolver>
</application>
由于有许多旋转变压器,每一个都有一点解析,我们的新解析器应该是最后的。将以下内容添加到web.xml
:
<context-param>
<param-name>org.apache.myfaces.EL_RESOLVER_COMPARATOR</param-name>
<param-value>org.apache.myfaces.el.unified.CustomLastELResolverComparator</param-value>
</context-param>
03.07.2015 07:34:21 com.myPackage.DebugELResolver [http-nio-8080-exec-2] WARN EL-Property msgx couldn't be resolved
我无法弄清楚如何获得实际的EL表达式(例如#{msgx.title_edit_customer}
。