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