Struts2 使用 XSLTResult 输出页面内容详解

Struts2 内置提供了 xslt 结果类型,实现类为 org.apache.struts2.views.xslt.XSLTResult,它让你方便的把获得的 XML 数据内容,或者是用 OGNL 能访问到的某个属性(像 ContenxtMap、Request 等中的属性),通过一个 xslt 文件转换成你想要的格式。前面这句听来不怎么明白,后面慢慢道来。

在 Struts2 的 struts-default.xml 中定义了 chain、dispatcher、freemarker、httpheader、redirect、redirectAction、stream、velocity、xslt 和 plainText 10 种类型的 Result;而在 Struts2 初期版本中的 jasper、chart、jsf 和 tiles 结果类型已移到相应的插件去实现了。

freemarker、velocity 和 xslt 可以很自由的使用各自的模板语言,velocity 渐渐淡出了我们的视野,那还剩下 freemarker 和 xslt。freemarker 要求实合并的变量是实体类型,满足了多数时候的需求,不过现在要说的 xslt 结果类型,向 xslt 文件送去的数据可以是实体类型,也可以是原生的 org.w3c.dom.Document 类型,当然到了 xslt 文件这一层处理的都是 阅读全文 >>

命令行下创建 Android 工程,用 Ant 进行编译部署

安装完 Android SDK 后可以在命令行下 Android.bat 命令创建一个示例项目,有 Ant 的话还可直接用 Ant 来编译部署到模拟器上运行。

环境准备:

告诉 path 要指向到 Android SDK 目录的 tools 子目录中,如 d:\android-sdk-windows\tools
要用 ant 编译部署的话,再把 ant 的 bin 目录加入到 path 上,如 D:\apache-ant-1.8.2\bin

CMD 进到命令行下,执行:
android create project -k cc.unmi.android.test -n Hello -a HelloAndroid -t 5 -p c:\TestAndroid

注:以上各参数的意义,可参考:http://developer.android.com/guide/developing/projects/projects-cmdline.html
-k 工程包名: cc.unmi.android.test
-n 工程名  : Hello 阅读全文 >>

推荐一种快速提高英语口语的方法

现在越来越多的外国企业在中国开设分公司,很多人有很强的技术和能力,但是英语不行进不了外企。这是因为中国糟糕的英语教育导致的,我们大家都是学英语学了几十年到头来都是英语聋哑人。

本方法是笔者多年国内外学习英语的经历并结合语言专家们的教学经验总结出来的,只是提高口语和听力,适合那些有一定英语基础,想提高口语,但不想花钱留学又不想上昂贵的英语培训班的人。另外其中有些方法会比较特别,颠覆传统的学习方法,可能不适合所有人,一般来说每天坚持本方法练习3到6个月就会有效果,如果仍然没有,那很可能本方法不适合你。

首先在介绍方法之前,我先给英语口语水平分3个级别。level0,level1和level2。无论刚开始学ABC还是大学过了四,六级,大部分人的口语level都是0,是的别不服气。什么是level1,0和1的区别就是当你说英语时候可以脱口而出,不用先在脑海里把要表达的中文翻译成英文。 阅读全文 >>

如何在WordPress里使用Featured Image功能

我想大部分人都很清楚WordPress 2.9版本开始,就增加了Featured Image这个功能。而且这样的功能多用于杂志式的主题,从里一个角度来说,用缩略图的形式比摘要输出形式更能体现网站的可读性!这里就介绍下如何为你的 WordPress主题添加Featured Image功能。

首先,看一看你的主题包,在functions.php文件里必须有下面的语句才能开启单篇日志以及页面里的Featured Image功能。

add_theme_support( 'post-thumbnails' );

当然,如果你只希望在单篇日志里开启这样的功能,只要加入

add_theme_support( 'post-thumbnails', array( 'post' ) ); 阅读全文 >>

Android Dalvik虚拟机初识 分享

首先,让我们来思考下面几个问题:

什么是Dalvik虚拟机?

Dalvik VM与JVM有什么区别?

Dalvik VM有什么新的特点?

Dalvik VM的架构是怎么样的?

首先,我得承认第一个问题问得很傻:什么是Dalvik虚拟机?没有人给出过一个明确的定义,但是,我们似乎可以从人们对Java虚拟机的描述中得到些信息。

Java 虚拟机(JVM)是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它有自己完善的硬件架构(如处理器、堆栈、寄存器 等),还具有相应的指令系统。使用“Java虚拟机”程序就是为了支持与操作系统无关、在任何系统中都可以运行的程序。 阅读全文 >>

Android 开发者官网镜像站点收集

怎么都搞不明白,一个纯技术性的网站 Android 开发者 http://developer.android.com/ 会被墙,找不到合适的理由。仅仅是出自于 Google,因 Google 不听 ZF 的话受影响?Android 牵动了什么人的神经,影响了什么群体的利益?

作技术的不能因为正常方式访问不了就不去另想他途,翻墙方式的种种这里不累述了。我们不会像多数人一样,以为搜索引擎只有一个百度(多数人其实根本不知道那个叫做搜索引擎)。在常规方式下,幸好还有不少 Android 开发者网站的镜像可以访问,虽然有些并不能非常及时的跟进同步,但也足够用的。

这里就收集一些可访问的 Android 镜像站点,千万不能因为我把它们集中在一块而给某些别有用心的人得了方便,而后害了那些热心的网站,那我可真的是很无聊。随着 appspot.com 的不幸,也让 http://androidappdocs.appspot.com 失效了。如果还有别的镜像站点,希望大家多多提供,谢谢啦。 阅读全文 >>

解决 Eclipse 中 Android.jar 无法关联源代码的办法

在 Eclipse 中一般的 jar 包在(F3 或 Ctrl + Click) 进到它的 Class 时,如果没有关联上源代码会有一个按钮让你关联下就可以查看源代码。可是在 Eclipse 中的 android.jar 中的类,却只会提示

Source not found
The JAR of this class file belongs to container 'Android 1.6' which does not allow modifications to source attachments on its entries.

也就是正常渠道关联不上源代码,那使用手动来引入 android.jar,用传统的方式来关联源代码如何,源码是能看到了,可是出现个错误。还是 Google 下吧,找到了 Browsing Android Source in Eclipse,他给我们提供了两种解决办法:

#Solution 1 阅读全文 >>

Tomcat 7 启动时出现 java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory

在 Eclipse WTP 3.1.1 中换成了使用 Tomcat 7,当然选择的仍然是 Tomcat 6,只是指向的目录是 Tomcat 7 的,一启动便立马出现错误:

java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:60)
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 1 more
Exception in thread "main" 阅读全文 >>

Lucene 索引、查询日期类型字段

Lucene 的 Field 在构造时内容参数可接受一个字符串或者字节数组,流等,不支持 Date 等类型。如果把 Date.toString() 转换成字符串来索引的话那么存储在索引中的样子就不确定(new Date().toString() 为 “Tue Mar 15 13:25:41 GMT+08:00 2011”),也给下次还原来为 Date 类型带来不便。在以前的版本 Lucene 专门提供了 DateField 来索引 Date 类型,但

现在不推荐使用了,而且也无法用,因为 Lucene 的 Document 在 add(Fieldable field) 时接受的是一个 Fieldable 类,然而 DateField 并未实现 Fieldable 接口,保留它是用来读取老的索引文件。

那 Lucene 要怎么索引日期类型呢?说到底,还是把它转换为字符串,搜索的时候从存储的字符串还原出来,辅助工具类是 DateTools, 它所提供的方法: 阅读全文 >>

JDK 7 中的语法增强 -- (4) 创建泛型实例时的类型推断

Java 的泛型实例在声明时有点傻,比如像这样的语句 List<String> list = new ArrayList<String>(); 前明的 List<String> 已经提供了足够的信息让编译器知道 ArrayList 的参数类型,当然这是个简单的例子,如果复杂些,来点嵌套的话:

Map<String, List<Map<String, String>>> myMap = new HashMap<String, List<Map<String,String>>>();

那就够呛的,所以 Java 的这一语法要求也让 Scala 这样的语言所诟病,当然人家 Scala 是个趋近于动态性的语言,它认为上面的语句应该这么写:

val x = new HashMap[String, List[String, List[Map[String, String]]]() 或者是
val x: Map[String, List[String, List[Map[String, String]]] = new HashMap()

总之,只要一端的表态就行,其他事情交给编译器来推断。现在 JDK 也反省到了这一点,因为引入一个叫做菱形操作符(Diamond operator) 的东西,即两个尖括号 <>。让使得你像 Scala 一样只要在左边声明参数类型就行啦。这个操作符不免让我想起了在 perl 里有个 <=>  这样的操作符,好像叫做飞机,不是斗地主的飞机,它相当于 Java 里的 compareTo() 的功能。

于是泛型实例的声明就简单化成了 Map<String, List<Map<String, String>>> myMap = new HashMap<>(); 继续往下看: 阅读全文 >>