Tag Archives: webwork

Webwork2.2.2 重返Client Validation

自Webwork2.2发布以后,Webwork的验证机制就全部改由Ajax验证。验证的原理是一个需要验证的表单域在onblur时发送一次请求到服务器端进行验证,然后实时提醒。虽然这样达到验证目的,但在我看来,这恶心死了。如果我有一个表单几十个域需要验证,我在各个域之间切换的话,我的服务器还不累得够呛?可怜原来有的客户端验证功能没了。。我只好手写Javascript了。。 到了Webwork2.2.2这个版本,有个好消息来了。Webwork重新支持客户端验证。于是马上抢先试了试。 客户端验证的例子可见Webwork自还的例子“showcase”。使用客户端验证大体上跟以前的服务器端验证相似,只是多了一些步骤。完整的有以下几个步骤: 一、编写XXXAction-alias-validation.xml--验证配置文件。文件放在需要验证的Action类同一目录下,alias是可选项,如果有几个Action使用了同一个Action类。而你想对其中一个Action进行验证,那么alias就是那个Action的名字。如:PersonAction.java,被editPerson,savePerson,deletePerson等Action使用到,而仅需要对savePerson这个动作来验证时,配置文件名字就是:PersonAction-savePerson-validation.xml。Webwork支持的客户端验证类型有: required validator requiredstring validator stringlength validator regex validator email validator url validator int validator double validator 二、配置Xwork.xml,保证拦截器栈里有Validation的拦截器 三、编写Jsp(VM或FTL)。这里有几个需要注意的地方。 1.在Jsp加上一个Head标签,<ww:head/>的结果是生成两个Css样式的链接: <link rel=”stylesheet” href=”/bean/webwork/xhtml/styles.css” type=”text/css”/> <link rel=”stylesheet” href=”/bean/webwork/jscalendar/calendar-blue.css” type=”text/css”/> 主要是获取显示错误是的样式。 2、使用<ww:form>,很遗憾我们只能够用Webwork的UI标签,这样才能使用到她的客户端验证机制。在这里要抱怨一下。。<ww:form>的标签是挺方便,但是在特定的场合,我们必须使用自已的样式和风格的布局。而Webwork默认的XHTML主题的标签会把布局搞乱。当然,我可以使用Simple主题的。但是在需要客户端验证的时候,Simple主题是行不通的。也就是说要求主题必须是XHTML以上。。或者自定义的主题(自已提供错误信息报告功能)。呵。没办法,先将就着用XHTML吧。 在<ww:form>的标签里使用namespace 及Action属性。如果你的Action是/foo/bar/new.action那么,你必须这样写: <ww:form namespace=”/foo/bar” action=”new”  validate=”true”/> validate=”true”一句将会在客户端生成一句: … Continue reading

Posted in 技术 | Tagged , | Leave a comment

Webwork Forward 2 html

Web浏览器是否能正确显示一个Web页通常依赖两个条件: 一、页面的编码(文件编码). 二、该页定义的contentType. 其中页面的编码是决定性的因素。两者一致是,浏览器会正常显示内容,否则有可能产生乱码现像。 如果一个Html文件,文件编码为UTF-8。contentType设为相同。则使用IE或Firefox查看,两者都会自动选择正确的编码形式来解释。当我将contentType设为GB2312,以为会造成乱码,结果不会。我认为原因是这样的:文件编码起决定作用,加上Utf-8包括了GB该有的字符,所以这种情况是以大的来认识小的。没问题。(不知是否有理解错误 :P)。 上述情况为使用浏览器直接把开网页文件的结果。当我使用Webwork的Action时,将Html文件作为结果时(结果类型为dispatcher),乱码出现了!文件编码为UTF-8,页面定义的ContentType为UTF-8。但是偏偏使用IE及FireFox均得到乱码的结果。郁闷中用Firefox查看了页面的属性,惊奇地发现页面编码居然是GB2312。我猜想是Webwork在Dispatch页面的时候使用了默认的编码,把本来UTF-8编码的页面重新用GB2312编码一次。于是试着在Action里面获得Response并把字符编码改为UTF-8。最后发现结果依然一样。这时,我觉得在Action完成后,Webwork接下来使用了Response,我的设置被重置了。于是决定自已写一个Servlet,指定字符编码为UTF-8,结果直接Forward到我的Html页面。结果正确了!再查看页面信息,两者都是UTF-8了。 平时使用Webwork来Dispatch的都是Jsp,不曾出现过这样的情况。原因是Jsp仍需要编译,编译时会读取Jsp页面指定的ContentType来决定Response里的字符编码。HTML文件则不一样。这时只能使用默认编码。如果我的工程是Gb2312,那根本就不存在刚才所讲的问题的。

Posted in 技术 | Tagged , | Leave a comment

让WebWork遍历Map

用Webwork的标签遍历,是一件很爽的事情。例如遍历一个List。你可以做得比之前任何一套标签更优雅和简单。当遇到Map的时候,可能你会束手无策。因为我也刚好有这样的经历。 如果知道Map里面的Key,使用Key去得到Value那不难做,只需要在遍历的标签里面写上<ww:property value=”yourMap['key']“/>即可。但是要把Map里面所有的无素都遍历出来,我查了好多网页都没有答案。最后查了下Webwork in action,发现只有一句话提到Map的遍历,但这句话足以让我找到答案了。原文是: When iterating over a Map, it iterates over the Set returned by Map.entrySet(), which is a set of Map.Entry objects, which in turn has the methods getKey() and getValue() to retrieve the associated key/value pairs. … Continue reading

Posted in 技术 | Tagged , , | 1 Comment