未找到EL时显示警告

时间:2015-07-02 07:20:41

标签: eclipse jsf el jsf-2.2

我正在创建一个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

1 个答案:

答案 0 :(得分:0)

感谢@ SJuan76,我可以理解:

  1. 创建自己的javax.el.ELResolver,所有方法都可以返回null / false。
  2. 打开课程来源org.apache.myfaces.el.unified.resolver.ScopedAttributeResolver并复制方法facesContext(ELContext)findScopedMap(FacesContext, Object)(因为ScopedAttributeResolver是最终的,我们无法扩展它)。
  3. 编辑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;
    }
    
  4. 修改faces-config.xml以注册您的解析器:

    <application> <el-resolver>com.myPackage.DebugELResolver</el-resolver> </application>

  5. 由于有许多旋转变压器,每一个都有一点解析,我们的新解析器应该是最后的。将以下内容添加到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>

  6. 现在,每次无法解析表达式时,您都会得到一些log-Output:
  7. 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}