Leegorous | 我的梦想飞行器

Archive for July 5th, 2009

我的目的就是要用archetype来创建一个struts2的blank项目,struts2官网上写的有2.1.6版本

可是我的archetype列表里面只有一个不存在的2.0.9-SNAPSHOT版本,http://people.apache.org/repo/m2-snapshot-repository/目前有2.0.11-SNAPSHOT和2.0.14-SNAPSHOT,这怎么办呢?
最原始的想法就是把包含2.1.6的repo地址(http://www.lenart.org.pl/maven/)加入到settings.xml里面,结果没反应。
手动安装,同样没反应。
这个时候可以想象到maven有一个列表一样的东西来维护这些archetype,很快网上的资料证实了我的想法,于是我尝试手动的更新catalog

mvn archetype:crawl

maven哄哄的扫描完一遍之后,没想到它依然缠绕在2.0.9-SNAPSHOT上面。

心都凉了,突然之间maven在我内心的评价直接跳水,maven的这个插件好傻。
其实这个时候应该换个archetype就好,appfuse有的,不过就是不喜欢它创建出来的东西太杂乱。不换archetype,应该可以换个archetype catalog吧,于是目光聚集在http://maven.apache.org/plugins/maven-archetype-plugin/examples/generate-alternative-catalog.html

mvn archetype:generate \
	-DarchetypeCatalog=http://www.lenart.org.pl/maven/

It works.
Pala pala的输入相关信息就创建好了。
不过这种做法的前提是repo有一个叫 archetype-catalog.xml 的文件。

不喜欢选择的话,可以用下面这个拉风得很的命令:

mvn archetype:generate \
	-DarchetypeCatalog=http://www.lenart.org.pl/maven/ \
	-B \
	-DarchetypeGroupId=org.apache.struts \
	-DarchetypeArtifactId=struts2-archetype-blank \
	-DarchetypeVersion=2.1.6 \
	-DgroupId=net.leegorous \
	-DartifactId=smui3 \
	-Dpackage=war \
	-Dversion=1.0-SNAPSHOT

注:-B : 表示批量执行,不提问,个人觉得一问一答也蛮有趣 :-P
命令换行为了显示方便,使用时请注意在一行完成。

·

不经意地被一位同事问起在javascript里面如何检测右键事件,并且屏蔽原来的右键菜单,上网查找一翻之后发现一些比较简单的方法。

如设置onmousedown,检查其event.button的值是不是2(代表右键)。

这个方法在FF和IE中都可用,但是在Maxthon中event.button却是0,这让我有点困惑,Maxthon不是IE内核的吗?

我只能设想Maxthon这个壳是做过手脚的。然而如果设置onmouseup,其event.button值就是2了。

所以如果检测右键的话,是设置其onmouseup即可。

document.getElementById("test").onmouseup=function(oEvent) {
    if (!oEvent) oEvent=window.event;
    if (oEvent.button==2) {
        //-- do something for user right click
        // alert("Mouse up");
    }
}

但是如果还需要屏蔽右键的话,还是用oncontextmenu比较简单,但这时就不是检测右键,而是检测是否弹出上下文菜单。

屏蔽的方法跟屏蔽其他默认行为的方法是一样的,一般来说都是有效的,不过因为某些浏览器有禁止禁止弹出右键菜单的功能,所以如果需要在用户点击右键时做点事情,最好还是不要放在oncontextmenu中,而是放在onmouseup中并检测右键,附加oncontextmenu来屏蔽原来的菜单。

document.getElementById("test").oncontextmenu=function(event) {
    //-- do something here
    // alert("ContextMenu Popup");
    //-- prevent the default behavior
    if (document.all) window.event.returnValue = false;// for IE
    else event.preventDefault();
};

通过一些简单的测试,可以发现在FF和在IE存在着有趣的区别。

在onmouseup和oncontextmenu事件处理中都使用alert,可以看出来是先执行onmouseup事件再到 oncontextmenu的,在IE中,两者会非常连贯的在一起执行,(均认为是发生在test元素上的事件),而在FF里面则不是(前提是test元素所占区域比较小,当alert弹出时需要移动鼠标才能点击’OK’的情况下),它会先执行onmouseup,alert出来之后,移动鼠标点击 ‘OK’,这时还是会弹出菜单的,但是如果不移开鼠标,而是直接按Enter确认的话,这时它就会认为是在test元素上触发的事件了。可以理解为是IE 和 Firefox中的事件机制的细节区别。当然我们很少会应用到连续事件的,就无须注意到这点区别了,把需要的事件处理完整的写在一个处理方法里面就是最简单有效的解决方案了。

PS: 这post是很久之前(2007-09-06)发布在旧blog里头的,现在拿出来翻炒一下~

·

Theme Design by devolux.nh2.me