多个<ui:include>使用相同的<ui:param name>导致PropertyNotFoundException

时间:2019-06-10 00:40:22

标签: jsf primefaces parameters include facelets

我正在制作一个将空白项目添加到列表的按钮,然后将这些项目显示在同一类型(地址)的一个对象(主要)旁边,该对象始终显示。我使用本身可以正常工作的参数,直到我仅使用一个具有给定参数名称的参数为止。 如果我同时添加两个组件(主地址和附加地址),则会出现PropertyNotFoundException。

我可以理解为什么我不能有两个同名的params,但是解决方法是什么?

<ui:include src="address.xhtml">
    <ui:param name="addressParam" value="#{bean.primaryAddress}"/>
</ui:include>

<p:commandButton icon="pi pi-plus">
    <p:ajax event="click" listener="#{bean.addAdditionalAddress()}" update="wrapper"/>
</p:commandButton>
<p:outputPanel id="wrapper">
    <p:repeat value="#{bean.additionalAddresses}" var="varAddress">
        <ui:include src="address.xhtml">
            <ui:param name="addressParam" value="#{varAddress}"/>
        </ui:include>
    </p:repeat>
</p:outputPanel>

address.xhtml:

<p:inputText value="#{addressParam.pickupAddres}" label="Pickup address"/>

address.xhtml的新项将呈现,但也会出现异常。 例外:

javax.el.PropertyNotFoundException: Target Unreachable, identifier [addressParam] resolved to null
    at org.apache.el.parser.AstValue.getTarget(AstValue.java:74) ~[tomcat-embed-el-9.0.16.jar:9.0.16]
    at org.apache.el.parser.AstValue.getType(AstValue.java:58) ~[tomcat-embed-el-9.0.16.jar:9.0.16]
    at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:174) ~[tomcat-embed-el-9.0.16.jar:9.0.16]
    at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getType(ContextAwareTagValueExpression.java:75) ~[myfaces-impl-2.2.12.jar:2.2.12]
    at org.primefaces.util.ComponentUtils.getConverter(ComponentUtils.java:164) ~[primefaces-7.0.jar:7.0]
...

(是的,我知道我可以只使用bean.addresses并考虑列表的第一项为'primaryAddress'或标志等。)

谢谢!

编辑:将<ui:repeat>替换为<c:foreach>仍会引发异常

0 个答案:

没有答案