精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-22
最后修改:2010-04-02
比较明显的一个问题就是,明明自己配置了验证plugin,也配置对了相应的validator文件,可验证就是不起作用,甚至导致action或相应的jsp 在被 访问的时间出现异常。 接下来先看下org.apache.struts.validator.ValidatorPlugIn 源码中一部分:
private String pathnames = null; public String getPathnames() { return pathnames; } 上面就是获取你在struts-config中配置验证插件的的pathnames,在插件被初始化时,会执行
public void init(ActionServlet servlet, ModuleConfig config) throws ServletException
方法,它里面又先调用 this.initResources(); 在这个方法内容就是加载验证配置文件,并将加载结果保存到类变量resources,resources 的定义:
protected ValidatorResources resources = null;
在 initResources()最后有如下语句,将分析后的验证配置文件内容进行保存
this.resources = new ValidatorResources(urlArray);
回到init(ActionServlet servlet, ModuleConfig config)方法,在调用initResoures()后,将执行下面两行: servlet.getServletContext().setAttribute(VALIDATOR_KEY + config.getPrefix(), resources);
servlet.getServletContext().setAttribute(STOP_ON_ERROR_KEY + '.' + config.getPrefix(), (this.stopOnFirstError ? Boolean.TRUE : Boolean.FALSE));
从第一句就能看到,它是将结果保存到ServletContext中,且Key是不变的,也就是说,当你加载多个相同的验证插件,将导致最开始加载的被后面的直接覆盖,就会出现明明加载了但并未起作用甚至导致页面显示不正常。
但如上面红色字体部分,我们是可以让多个验证插件同时存在的。当我们在web中进行配置时,可以加上模块名,如默认ActionServlet 有config 这个参数,我们可以添加配置config/moduleName 这个moduleName有点像struts2中package的namespace.这样在访问具体action时路径也就变为app/moduleName/action。具体config怎么来的建议查看相关struts 初始化的文章,API对ModuleConfig.getPrefix()的描述如下: The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet. A configuration with a prefix of a zero-length String is the default configuration for this web module.
代码格式调了半天就是调不好,干脆不用代码标记了
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1284 次