我在一个新的项目中想直接使用com.easyjf.sercurity.mvc.LoginAction来实现登录。LoginAction的部份代码:
@Action(view="cms/manage")
public class LoginAction extends AbstractPageCmdAction {
public Page doLogin(WebForm form, Module module) {
loginTimes++;
return page("login");
}
}
在默认情况下要求login.html放在/views/cms/manage/login/login.html位置。但我的配置文件不希望放在/views/cms/manage/login/login.html这个文件,因此按照开发文档在easyjf-web.xml中自动配置了一个Action,如下:
<module name="/login" path="/login" action="com.easyjf.security.mvc.LoginAction" inject="byType">
<page name="login" url="/login.html" type="template"/>
</module>
然后启动Web服务器,执行login.ejf。得到如下的错误:
友情提示!
frameworkException : 找不到模板!/WEB-INF/views/cms/manage/login/init.html; nested exception is org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource '/cms/manage/login/init.html'
详细请查询
http://www.easyjf.com
似乎没有按照我想要的方式来工作,再看启动日志:
1125 [main] INFO com.easyjf.web.FrameworkLoader - 自动加载Action:com.easyjf.security.mvc.LoginAction-------路径:/login
1125 [main] INFO com.easyjf.web.FrameworkLoader - 自动加载Action:com.easyjf.security.mvc.LoginAction-------路径:/login
很显然,这不是我需要的结果。应该改成下面的方式:
在默认的情况下,EasyJWeb会在指定的包中扫描Action,但如果已经通过easyjf-web.xml来配置了Action,则不应该再加载这个Action。
// 如果容器中已经注册过这个类,或者已经具有同path的module,则不进行注册
if (container.getBean(clz) == null
&& this.webConfig.getModules().get(name) == null) {
if (name.charAt(0) != '/')
name = "/" + name;
logger.info("自动加载Action:" + clz.getName()
+ "-------路径:" + name);
这其中由于我们的存放到webCofig中的类路径都是带有/的,因此需要把if (name.charAt(0) != '/')name = "/" + name;这一句提到if(container.)之前。问题已经得到解决。