struts2中java.lang.NoSuchMethod的问题
做了一个SSH2整合的项目报错如下java.lang.NoSuchMethodException:action.UserAction.login()java.lang.C...
做了一个SSH2整合的项目报错如下
java.lang.NoSuchMethodException: action.UserAction.login()
java.lang.Class.getMethod(Class.java:1605)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
applicationContext.xml用的自动加载bean
<!-- 自动扫描配置Bean -->
<context:component-scan base-package="/" />
<!-- 允许基于注解(Annotation-based)的配置 -->
<context:annotation-config />
struts2的配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 可以自定义action的扩展名默认为".action"以下配置为可以使用多种扩展名 -->
<constant name="struts.action.extension" value="action,do" />
<!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire" value="name" />
<package name="default" extends="struts-default">
<action name="userAction_*" class="userAction" method="{1}">
<result name="loginuccess">/main.jsp</result>
<result name="loginfail">/fail.jsp</result>
</action>
<action name="userActionlogin" class="userAction" method="isLogin">
<result name="loginuccess">/main.jsp</result>
<result name="loginfail">/fail.jsp</result>
</action>
</package>
</struts>
Action文件如下
package action;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import service.impl.ServiceImpl;
@Controller
@Scope("prototype")
public class UserAction {
@Resource private ServiceImpl serviceImpl;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String isLogin(String username, String password){
if(serviceImpl.isLogin(username, password)){
return "loginsuccess";
}
return "loginfail";
}
public String execute(){
return "loginfail";
}
}
于是就出现了很奇怪的现象,如果我的action命名为userAction就能够找到execute方法。但是如果采用通配符设置将action命名为userAction_isLogin的话,就找不到isLogin的方法。求各位高手帮忙啊!!!!!
错了,因为我刚才要试一试换个名字好不好使,其实是java.lang.NoSuchMethodException: action.UserAction.isLogin()。像代码大小写啊,是不是public了什么的小错误我都找了,但是还是找不到错误,最关键的是execute方法就好使,isLogin方法就不好使了…………………… 展开
java.lang.NoSuchMethodException: action.UserAction.login()
java.lang.Class.getMethod(Class.java:1605)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
applicationContext.xml用的自动加载bean
<!-- 自动扫描配置Bean -->
<context:component-scan base-package="/" />
<!-- 允许基于注解(Annotation-based)的配置 -->
<context:annotation-config />
struts2的配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 可以自定义action的扩展名默认为".action"以下配置为可以使用多种扩展名 -->
<constant name="struts.action.extension" value="action,do" />
<!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire" value="name" />
<package name="default" extends="struts-default">
<action name="userAction_*" class="userAction" method="{1}">
<result name="loginuccess">/main.jsp</result>
<result name="loginfail">/fail.jsp</result>
</action>
<action name="userActionlogin" class="userAction" method="isLogin">
<result name="loginuccess">/main.jsp</result>
<result name="loginfail">/fail.jsp</result>
</action>
</package>
</struts>
Action文件如下
package action;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import service.impl.ServiceImpl;
@Controller
@Scope("prototype")
public class UserAction {
@Resource private ServiceImpl serviceImpl;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String isLogin(String username, String password){
if(serviceImpl.isLogin(username, password)){
return "loginsuccess";
}
return "loginfail";
}
public String execute(){
return "loginfail";
}
}
于是就出现了很奇怪的现象,如果我的action命名为userAction就能够找到execute方法。但是如果采用通配符设置将action命名为userAction_isLogin的话,就找不到isLogin的方法。求各位高手帮忙啊!!!!!
错了,因为我刚才要试一试换个名字好不好使,其实是java.lang.NoSuchMethodException: action.UserAction.isLogin()。像代码大小写啊,是不是public了什么的小错误我都找了,但是还是找不到错误,最关键的是execute方法就好使,isLogin方法就不好使了…………………… 展开
5个回答
展开全部
看好了。
在struts2中。你的isLogin得和execute有相同的格式。
也就是说。你的isLogin方法不能带参。
你就能调用了。
在struts2中。你的isLogin得和execute有相同的格式。
也就是说。你的isLogin方法不能带参。
你就能调用了。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好。
你试试把
{1}
改为
{0}
看看行不行。
另外,class对应的类名应该是UserAction吧。
你试试把
{1}
改为
{0}
看看行不行。
另外,class对应的类名应该是UserAction吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
谁一看这么多的代码都晕了。。。
我觉得你是不是可以先看看方法大小写的问题!这个是关键~我经常犯这种错误
其次,我建议你不要用通配符,通配符虽然挺好用的,但是代码分析上效果不是很理想!
我觉得你是不是可以先看看方法大小写的问题!这个是关键~我经常犯这种错误
其次,我建议你不要用通配符,通配符虽然挺好用的,但是代码分析上效果不是很理想!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public class UserAction {
<action name="userAction_*" class="userAction" method="{1}">
类名和配置文件的名字要一样的,有没一起配置呢?
<action name="userAction_*" class="userAction" method="{1}">
类名和配置文件的名字要一样的,有没一起配置呢?
追问
我在applicationContext里面设置了
这样只要采用Action的首字母小写就可以了。从错误看应该是可以找到这个Action但是找不到Method吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
报错明明写的 找不到UserAction.login()
它也没去找isLogin()方法呀 你请求写错了吧
它也没去找isLogin()方法呀 你请求写错了吧
追问
错了,因为我刚才要试一试换个名字好不好使,其实是java.lang.NoSuchMethodException: action.UserAction.isLogin()。像代码大小写啊,是不是public了什么的小错误我都找了,但是还是找不到错误,最关键的是execute方法就好使,isLogin方法就不好使了……………………
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询