首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将HashMap JAXB输出优化为JSF语法

如何将HashMap JAXB输出优化为JSF语法
EN

Stack Overflow用户
提问于 2015-01-04 08:10:19
回答 1查看 80关注 0票数 0

有了这个JAXB定义,我想优化HashMap输出

代码语言:javascript
复制
@XmlRootElement
public class ViewElement {
    private Map<StlType, ElementStyle> styles;
    @XmlElementWrapper <---- must be removed thanks to @lexicore
    @XmlVariableNode("type")    
    public Map<StlType, ElementStyle> getStyles() {
        return styles;
    }
    private List<ViewElement> elements;
    @XmlElementWrapper <---- must be removed thanks to @lexicore    
    @XmlElementRefs({
              .....
        })          
    public List<ViewElement> getElements(){
        return elements;
    }
}

我目前的产出是:

代码语言:javascript
复制
<tab>
    <styles>
        <html width="100px" />
        <print width="100px" />
    </styles>
    <elements>
        <field id="code"/>
        <field id="code2"/>
        <listing>
             ....
        </listing>
    </elements>
</tab>

我能得到这个优化的输出吗?(即使没有"e:“和"s:")

代码语言:javascript
复制
<e:tab>
    <s:html width="100px" />
    <s:print width="100px" />   
    <e:field id="code"/>
    <e:field id="code2"/>
    <e:listing>
          ....
    </e:listing>    
</e:tab>

好了,现在我有

代码语言:javascript
复制
@XmlJavaTypeAdapter(value=EventAdapter.class)   
public Map<Event, String> getEvents() {     
    return events;
}

使用

代码语言:javascript
复制
public class EventAdapter extends XmlAdapter<EventAdapter.AdaptedMap, Map<Event, String>> { 
    public static class AdaptedMap {
        @XmlVariableNode("key")
        List<AdaptedEntry> entries = new ArrayList<AdaptedEntry>();
    }
    public static class AdaptedEntry {
        @XmlTransient
        public String key;
        @XmlValue
        public String value;
    }
    @Override
    public AdaptedMap marshal(Map<Event, String> map) throws Exception {
        if (map==null||map.size()==0)
            return null;
        AdaptedMap adaptedMap = new AdaptedMap();       
        for(Entry<Event, String> entry : map.entrySet()) {
            AdaptedEntry adaptedEntry = new AdaptedEntry(); 
            adaptedEntry.key = entry.getKey().toString();
            adaptedEntry.value = entry.getValue();
            adaptedMap.entries.add(adaptedEntry);
        }
        return adaptedMap;
    }   
    @Override
    public Map<Event, String> unmarshal(AdaptedMap adaptedMap) throws Exception {
        if (adaptedMap==null)
            return null;
        List<AdaptedEntry> adaptedEntries = adaptedMap.entries;
        Map<Event, String> map = new HashMap<Event, String>(adaptedEntries.size());
        for(AdaptedEntry adaptedEntry : adaptedEntries) {
            map.put( Event.valueOf(adaptedEntry.key), adaptedEntry.value );
        }
        return map;
    }       
}

输出也是

代码语言:javascript
复制
<tab>
    <html/>
    <print/>  
    <events>
         <onCellEnter>aa</onCellEnter>
    </events>
</tab>

如何删除事件标签?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-04 09:45:35

@XmlPath(".")删除"events“映射包装器

代码语言:javascript
复制
@XmlPath(".")
@XmlJavaTypeAdapter(value=EventAdapter.class)   
public Map<Event, String> getEvents() { 
    return events;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27763671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档