我在@Requestmapping
中使用LoginController.java
时遇到错误。
获取
等错误Multiple markers at this line
- The attribute value is undefined for the annotation type
RequestMapping
- RequestMethod cannot be resolved to a variable
- The attribute method is undefined for the annotation type
RequestMapping
- RequestMapping cannot be resolved to a type and some other errors also.
Please check bean.xml file also.
LoginController.java
package control;
import model.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.ui.ModelMap;
@Controller
public class LoginControl{
private ApplicationContext context = null;
private UserJDBCTemplate userJDBCTemplate = null;
public LoginControl(){
context = new ClassPathXmlApplicationContext("Beans.xml");
userJDBCTemplate = (UserJDBCTemplate)context.getBean("userJDBCTemplate");
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView userLogin() {
return new ModelAndView("login", "command", new User());
}
@RequestMapping(value = "/loginCheck", method = RequestMethod.POST)
public String checkUser(@ModelAttribute("SpringWeb")User user, ModelMap model) {
model.addAttribute("username", user.getUsername());
if(userJDBCTemplate.checkLogin(user)){
return "loginsuccess";
}
return "loginerror";
}
@RequestMapping(value = "/add", method = RequestMethod.GET)
public ModelAndView userAdd() {
return new ModelAndView("add", "command", new User());
}
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String addUser(@ModelAttribute("SpringWeb")User user, ModelMap model) {
model.addAttribute("username", user.getUsername());
if(userJDBCTemplate.create(user)){
return "addsuccess";
}
return "adderror";
}
}
的beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="control"/>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/login"/>
<property name="username" value="root"/>
<property name="password" value="infoobjects"/>
</bean>
<!-- Definition for userJDBCTemplate bean -->
<bean id="userJDBCTemplate" class="control.UserJDBCTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
答案 0 :(得分:2)
您需要为pom.xml/classpath
添加spring-web依赖关系。
您还必须将< mvc:annotation-driven/>
添加到beans.xml
文件中。
答案 1 :(得分:0)
检查spring-webmvc.jar
文件的类路径是否可用,
假设您使用了eclipse,那么在classpath
中可以使用或不符合类。单击 ctrl + shift + t ,将打开一个OpenType窗口,类型名称为RequestMapping。如果它在匹配项目中显示,那么它可用,否则不可用。在你的情况下,这不是你得到错误的原因
The attribute value is undefined for the annotation type
其次,要从容器中获取bean,有很多方法,比如
例如,通过使用ApplicationContextAware
接口获取bean,它提供setApplicationContext()
来获取访问上下文。
public class LoginController implements ApplicationContextAware {
private ApplicationContext applicationContext;
private UserJDBCTemplate userJDBCTemplate;
public String checkUser(){
//get your UserJDBCTemplate bean from container and use it
userJDBCTemplate = (UserJDBCTemplate)context.getBean("userJDBCTemplate");
}
//Here, spring will set ApplicationContext
void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
}
但这些都是不好的方法,原因不是控制反转(IoC)。你应该使用spring的iversion控件。
在bean配置文件中,您已声明<context:annotation-config/>
,但您没有使用此标记功能,该功能用于激活bean类中的各种注释,如@Required
,@Autowired
,{ {1}},@PostConstruct
和@PreDestroy
(如果有)。
所以在你的情况下你应该使用@Resource
注释来注入@Autowired
bean
使用IoC你必须修改你的bean配置文件,就像@freakman在他的回答中所说的那样。
添加UserJDBCTemplate
注意:强> 要使用上面的标记,请将此模式添加到bean配置文件的顶部。
<mvc:annotation-driven/>
将xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
类构造函数更改为使用构造函数注入,如:
LoginController
这里Spring会自动为你提供@Autowired
public LoginControl(UserJDBCTemplate userJDBCTemplate){
this.userJDBCTemplate = userJDBCTemplate;
}
bean。
答案 2 :(得分:0)
在构建路径上添加spring-web jar。下载所有的罐子 http://www.javatpoint.com/src/sp/springjars.zip
如果您使用的是pom.xml,则添加spring-web依赖项。