将属性集合作为Map传递给复合组件属性

时间:2014-01-22 18:01:38

标签: jsf-2 map attributes validation composite-component

我想将一组属性传递给复合组件(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打印地图键和值。

0 个答案:

没有答案