Несколько <ui: include>, использующих одно и то же имя <ui: param>, вызывают исключение PropertyNotFoundException - PullRequest
0 голосов
/ 10 июня 2019

Я делаю кнопку, которая добавляет пустые элементы в список, затем эти элементы отображаются помимо одного объекта (основного) того же типа (адрес), который отображается всегда.Я использую с параметром, который сам по себе работает нормально, пока я не использую только один с данным именем параметра.Если я добавляю оба компонента (основной адрес и дополнительный адрес), я получаю PropertyNotFoundException.

Я могу понять, почему у меня не может быть двух параметров с одинаковым именем, но какой обходной путь для этого?

<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> все еще вызывает исключение

...