http://blog.csdn.net/doubeizhucele/article/details/42263887

fintesse会把!{}标记的变量视为HashTable对象,展现到页面上的将是table格式(userguide中提到可以改变hashtable的css样式)

======   Java 代码   =========

public Map getMap(Map map) {
        Set set =map.keySet();
        for(Object key:set){
            System.out.println(key+":"+map.get(key));
        }
        return map;
    }

====== fitnesse脚本  ============

!define teacher [!{name:laozhang,tech:Math}]
!define xiaoming [!{name:tom,age:18,teacher:${teacher}}]

|script|!-Test-!                 |
|$a=   |getMap;      |${xiaoming}|

==== 执行结果  =======

======  分析原因  =================

1. 修改代码

public Map getMap(Map map) {
        Set set =map.keySet();
        for(Object key:set){
            System.out.println(key+":"+map.get(key).getClass().getName());
        }
        return map;
    }

2.  执行fitnesse脚本后,查看日志,发现teacher的value是String型,而不是hashtable对象

age:java.lang.String
name:java.lang.String
teacher:java.lang.String

3. 再次修改代码

public Map getMap(Map map) {
        Map output = new HashMap();
        Set set = map.keySet();
        for (Object key : set) {
            System.out.println(key+":"+hashtableString2Map((String) map.get(key)));
            output.put(key, hashtableString2Map((String) map.get(key)));
        }
        return output;
    }

4. 执行fitnesse脚本后,查看输出结果和日志

age:18
name:tom
teacher:{name=laozhang, tech=Math}

5. 再次分析原因,发现fitnesse会把map接口对象自动视为hashtable(应该是为了fitnesse展现出较好的样式,但是如果把结果对象作为参数传入到其他方法内,可能会造成不可预期的错误,比如JSONObject的fromObject方法),为了避免可能的错误,需要把输出类型强制转换为HashMap,代码如下

public HashMap getMap(Map map) {
        Map output = new HashMap();
        Set set = map.keySet();
        for (Object key : set) {
            System.out.println(key+":"+hashtableString2Map((String) map.get(key)));
            output.put(key, hashtableString2Map((String) map.get(key)));
        }
        return (HashMap) output;
    }

==== 新增方法hashtableString2Map ============

public static Object hashtableString2Map(String hashtableString) {
        if (hashtableString.startsWith("<table class=\"hash_table\">")
                && hashtableString.endsWith("</table>")) {
            Map map = new HashMap();
            Document document = XMLParser
                    .getDocumentFromString(hashtableString);
            Element parent = XMLParser.getRootNode(document);
            List hash_rows = parent.elements();
            String key = "";
            String value = "";
            for (int i = 0; i < hash_rows.size(); i++) {
                Element hash_row = (Element) hash_rows.get(i);
                List hashtableList = hash_row.elements();
                for (int j = 0; j < hashtableList.size(); j++) {
                    Element ele = (Element) hashtableList.get(j);
                    String attrValue = ele.attributeValue("class");
                    if ("hash_key".equals(attrValue)) {
                        key = ele.getText();
                    } else if ("hash_value".equals(attrValue)) {
                        value = ele.getText();
                    }
                    map.put(key, value);
                }
            }
            return map;
        }
        return hashtableString;
    }

再次执行fitnesse脚本,得到结果

最新文章

  1. The SQL Server Service Broker for the current database is not enabled
  2. C#学习笔记----栈与堆的知识
  3. 使用hue+oozi构建任务调度系统
  4. C# 命令绑定
  5. android适配器及监听点击和滚动在ListView中的使用
  6. 倒影(box-reflect)
  7. mysql 链接数据库
  8. [置顶] think in java interview-高级开发人员面试宝典(七)
  9. MAC随机修改批处理
  10. Oracle总结第三篇【PLSQL】
  11. shell 报错:syntax error: unexpected end of file
  12. Python标准库之ConfigParser模块
  13. card布局解决复杂操作的布局问题
  14. 判断exe执行结束,事件监听
  15. java web----TCP/DUP 通信
  16. python 百度cpc点击
  17. 因写太多 BUG!程序员遭公司颁奖羞辱,做的一个比一个绝​
  18. jenkins 多用户同时触发构建—简单实用
  19. JQUERY双下拉框内容的左右移动
  20. mysql出现1030 Got error 28 from storage engine解决方法

热门文章

  1. log4e下载地址
  2. 大数据 -- Spark
  3. java基础篇---文件上传(commons-FileUpload组件)
  4. [转]操作MySQL数据库报出:Parameter index out of range (1 &gt; number of parameters, which is
  5. WPF打包工具
  6. 编译JDK源代码【转】
  7. 【oneday_onepage】——美国主食吃什么
  8. Servlet 全局验证是否登录
  9. 【转】如果有人让你推荐Python技术书,请让他看这个列表
  10. 《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷