Struts2使用通配符出现org.apache.struts2.dispatcher.Dispatcher - Could not find action or result的问题
这个问题困扰了我很久,一开始以为是路径的万体,找了一天半发现不是路径的问题。
下面是我的代码和解决办法:
Action类:
UsersAction.java
public class UsersAction extends ActionSupport { private String email; private String pwd; private UsersService usersService; public void setPwd(String pwd) { this.pwd = pwd; } public void setUsersService(UsersService usersService) { this.usersService = usersService; } @Override public String execute() throws Exception { return super.execute(); } public void setEmail(String email) { this.email = email; } public String login(){ if (usersService.selectByEmail(email,pwd)) return "index"; else return ERROR; } }
struts.xml:(Action类我用的是spring注入的所以没有写路径)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" ".5.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <constant name="struts.devMode" value="true" /> <constant name="struts.objectFactory" value="spring"/> <package name="default" extends="struts-default" namespace="/" > <action name="users_*" class="usersAction" method="{1}"> <result name="login">public/head.jsp</result> <result name="error">public/foot.jsp</result> </action> <action name="register" > <result>/public/register.jsp</result> </action> <action name="index"> <result>/common/index.jsp</result> </action> </package> </struts>
jsp:
<s:form action="users_login.action" method="post"> …… </s:form>
解决办法:
最后是在配置文档struts.xml的Action中配置了
<allowed-methods>Action内的方法名</allowed-methods>才成功了
例如在我action配置中加入:
<action name="users_*" class="usersAction" method="{1}"> <result name="login">public/head.jsp</result> <result name="error">public/foot.jsp</result> <allowed-methods>login</allowed-methods> </action>
总结:
在struts2.3之前的版本,正常的配置就可以了,但在struts2.3版本之后,使用通配符调用方法时,内部会验证是否允许访问该方法,所以要加上
<allowed-methods>方法名1,方法名2…</allowed-methods>代码。