我想将一组属性传递给复合组件(jsf 2.2,Mojarra 2.2.4-jbossorg-1,在WildFly 8 CR1上运行)。属性的数量是随机的,所以我决定使用bean的映射引用。我还需要一个复合组件的验证器。该验证器将获得这些属性以实现验证。
这是复合组件实现的一部分:
<h:inputText id="in" value="#{cc.attrs.value}" styleClass="form-control"
binding="#{cc.attrs.inputBinding}" required="#{cc.attrs.required}"
requiredMessage="#{cc.attrs.requiredMessage}">
<c:if test="#{not empty cc.attrs.placeholder}">
<f:passThroughAttribute name="placeholder" value="#{cc.attrs.placeholder}"/>
</c:if>
<c:if test="#{not empty cc.attrs.validatorId}">
<f:validator validatorId="#{cc.attrs.validatorId}"/>
<c:forEach var="attr" items="#{cc.attrs.validatorAttributes}">
<f:attribute name="#{attr.key}" value="#{attr.value}"/>
</c:forEach>
</c:if>
</h:inputText>
在复合组件的界面中,我以这种方式声明了map的属性:
<cc:attribute name="validatorAttributes" required="false" type="java.util.Map"/>
当我使用复合组件时,我以这种方式声明了对地图的参考:
validatorAttributes="#{bean.referenceNumberAttributeMap}"
我尝试使用地图:
<String, String> and <String, Object>
在验证器中,我得到了这个属性:
component.getAttributes().get("someKey")
似乎由于某种原因没有添加属性。如果我在h:inputText之外使用c:forEach,我可以用h:outputText打印地图键和值。