另外,把方法名称改成create,系统也一样能识别。如:
public Page create(WebForm form,Module module) public Page create(WebForm form) public Page create(Module module) public Page create(); public void create(WebForm form,Module module) public void create(WebForm form) public void create(Module module) public void create(); |
我们可以使用xxx.ejf?easyJWebCommand=create的方式来调用这个方法,也可以使用xxx.ejf?cmd=create的方式来调用,甚至我们还可以使用/ejf/xxx/create的形式来调用。
这种灵活的Action中的命名方法,一方面可以使代码更加简洁,易维护,同时也使我们的代码看起来更cool。另外一个主要原因是其使我们可以非常容易书写这些方法的测试代码,不需要任何Web容器,我们就能运行EasyJWeb的单元测试。
看看Struts那种每个方法都必须生搬硬套的生成下面的方法:
public ActionForward command(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) ...{ … } |
对照EasyJWeb中提供的百变Command方法签名,您是否感觉到这个世界正在前进呢?
3、更多的“动感”地带
想动就动起来吧,不仅仅体现在方法的书写方式上。在EasyJWeb中很多地方都用到了这种“动态”的特性,比如forward及go方法提供的多种调用方法,验证标签中以自然语言为主体的动态参数配置信息,都体现了EasyJWeb能“动起来”的特性。
以验证为例,我们可以通过多种方式来告诉EasyJWeb我们需要进行验证。比如我可以通过在@FormPO中针对一个或多个属性指定验证规则,看示例:
@FormPO(name="person",validators=... {@Validator(name="required",field="name,sex,heigth,borndate"), @Validator(name="range",field="borndate",value="min:1908-01-01;max:2008-01-01")}) public class Person...{ …属性及getter/setter方法 } |
你应该猜得出来,上面的标签中我们指定Person对象的name,sex,heigth,borndate等属性为必填属性。在验证数据范围的RangeValidator中,你可以不用去管要验证的目标类型是Integer还是BigDecimal或者是Date,只要他能比较,就可以应用该验证器来对其值范围进行验证,确保我们的域模型得到的是一个合理的值。
在标识验证的时候,可以设置自定义的验证提示信息。比如你可以使用下面的方式来标识一个范围验证:
@Validator(name="range",field="borndate",value="min:1908-01-01;max:2008-01-01;min_msg:出生日期不能小于1908年;max_msg:出生日期不能大于2008年!")
除了min_msg及max_msg以外,你还可以使用基于java习惯的minMsg及maxMsg来标识同样的验证提示信息。