【问题标题】:Java: Spring Framework: Declaring Nested MapsJava:Spring 框架:声明嵌套映射
【发布时间】:2009-06-08 06:07:44
【问题描述】:

我在第 4 行收到一条错误消息: cvc-complex-type.2.4.d:发现以元素“map”开头的无效内容。此时不需要子元素。

  <util:map id="entirePayTypesMap">
            <entry key="34">
                <value>
                    <map>
                         <entry key="default">
                              <value>
                                 <map  key-type="java.lang.Boolean">
                                     <entry key="true" value="3T" />
                                     <entry key="false" value="3U" />
                                 </map> 
                              </value>
                         </entry>
                     </map> 
                </value>
            </entry>
    </util:map> 

有什么建议吗?

【问题讨论】:

    标签: java maps spring


    【解决方案1】:

    对于复杂的值类型,不要嵌套 map 元素,而是使用value-ref 属性。默认情况下,value 元素仅接受 String 值。

    属性可以是字符串,也可以使用 JavaBeans PropertyEditor 机制转换为所需的类型。这使得应用程序开发人员可以编写可以将字符串转换为任意目标对象的自定义 PropertyEditor 实现。

    请注意,这仅建议用于简单对象。通过使用对其他 bean 的引用填充 JavaBean 属性来配置更复杂的对象。

    您的数据将类似于:

    <util:map id="mapA" key-type="java.lang.Boolean">
        <entry key="true" value="3T" />
        <entry key="false" value="3U" />
    </util:map>
    <util:map id="map1">
        <entry key="default" value-ref="mapA"/>
    </util:map>
    
    <util:map id="mapB" key-type="java.lang.Boolean">
        <entry key="true" value="4T" />
        <entry key="false" value="4U" />
    </util:map>
    <util:map id="map2">
        <entry key="default" value-ref="mapB"/>
    </util:map>
    
    <util:map id="entirePayTypesMap">
        <entry key="34" value-ref="map1"/>
        <entry key="35" value-ref="map2"/>
    </util:map>
    

    【讨论】:

      【解决方案2】:
      <util:map id="map1" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.util.HashMap">
      
      <entry key="" value-ref="map2">
      
      </util:map>
      
      
      
      <util:map id="map2" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.util.HashMap">
      
      <entry key="" value-ref="map3">
      
      </util:map>
      
      
      
      <util:map id="map3" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.lang.Boolean">
      
      <entry key="" value="">
      
      </util:map>
      

      【讨论】:

      • 不可能。当所有 map2 条目为 true 时,该值将相同。
      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 2020-01-27
      • 2020-03-06
      • 1970-01-01
      • 2020-07-17
      • 2023-03-29
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多