在CustomComponent中的EL中找不到Omnifaces Taglib

时间:2016-11-23 09:52:46

标签: jsf jboss wildfly el omnifaces

我目前正在将一个webapp从JBoss 7.1升级到Wildfly 10.1,在那里我偶然发现了一个关于自定义组件中表达式语言中taglib分辨率的相当棘手的问题。

我设法隔离了这个问题,这显然可以归结为这样一个事实:JSFs ExpressionBuilder找不到我的自定义组件中定义的正确名称空间,因此抱怨它对Omnifaces标签库一无所知:

javax.el.ELException: Function 'of:format1' not found
at com.sun.el.lang.ExpressionBuilder.visit(ExpressionBuilder.java:275)
at com.sun.el.parser.SimpleNode.accept(SimpleNode.java:172)
at com.sun.el.lang.ExpressionBuilder.prepare(ExpressionBuilder.java:227)
at com.sun.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:238)
at com.sun.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:295)
at com.sun.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:112)
at org.jboss.weld.util.el.ForwardingExpressionFactory.createValueExpression(ForwardingExpressionFactory.java:53)
at org.jboss.weld.el.WeldExpressionFactory.createValueExpression(WeldExpressionFactory.java:48)
at org.jboss.weld.util.el.ForwardingExpressionFactory.createValueExpression(ForwardingExpressionFactory.java:53)
at org.jboss.weld.el.WeldExpressionFactory.createValueExpression(WeldExpressionFactory.java:48)
at com.sun.faces.facelets.el.ELText.parse(ELText.java:411)
at com.sun.faces.facelets.el.ELText.parse(ELText.java:342)

有趣的是,只有在of:format1内嵌入对嵌套EL表达式的评估时才会发生这种情况。

可以在Bitbucket repository找到可以重现问题的最小示例,但这里是我的自定义组件的相关代码:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:cc="http://xmlns.jcp.org/jsf/composite"
      xmlns:of="http://omnifaces.org/functions">

<h:head>
    <title>Testing EL</title>
</h:head>

<h:body>
    <cc:interface>
        <cc:attribute name="model" type="sandbox.eltest.model.Entity" required="true" />
    </cc:interface>

    <cc:implementation>
        <div id="#{cc.clientId}">
            <c:set var="value" value="#{cc.attrs.model.value}" />
            #{of:format1('Hello {0}', value)} <!-- Prints "Hello World" correctly -->
            #{of:format1('Hello {0}', cc.attrs.model.value)} <!-- THROWS javax.el.ELException -->
        </div>
    </cc:implementation>
</h:body>

</html>

带有内联cc.attrs.model.value的第二个版本曾用于JBoss 7.1。我在Wildfly 10.1上缺少什么?

0 个答案:

没有答案