我是Spring的新手,遇到以下问题。
我有以下控制器,其中@Autowired可以完美运行(尝试调试并且可以正常运行)。
@Controller
@RequestMapping(value = "/registration")
@SessionAttributes("rf")
public class RegistrationController
{
@Autowired
UserJpaDao userDao;
@RequestMapping(method = RequestMethod.GET)
@Transactional
public String setupForm(Model model) throws Exception
{
model.addAttribute("rf", new RegistrationForm());
return "registration";
}
@RequestMapping(method = RequestMethod.POST)
@Transactional
public String submitForm(@ModelAttribute("rf") RegistrationForm rf, Model model) throws Exception
{
// ...
User user = rf.getUser();
userDao.save(user);
// ...
return "registration";
}
}
但是,当我提交表单时,我的RegistrationForm中的@Autowired字段仍然为空。
RegistrationForm.java:
@Component
public class RegistrationForm
{
@Autowired
CountryJpaDao countryDao;
// ... fields...
public RegistrationForm()
{
}
@Transactional
public User getUser() throws InvalidUserDataException
{
//...
Country c = countryDao.findByCode("GB"); // Throws java.lang.NullPointerException
// ...
}
// ... getters/setters...
}
这是表单的HTML / JSTL:
<form:form method="POST" modelAttribute="rf">
...
</form:form>
谁能帮我?
谢谢。
(受SpringSource论坛上的这篇文章启发)
您在这里混淆了您的概念。您可以对Spring管理的bean 使用like
@Component
和,对于用于绑定表单数据的瞬态,一次性对象也可以使用此类对象。不应将两者混为一谈。您的和上的注释将被Spring忽略,因为它们不适用于该上下文。@Autowired``@ModelAttribute``@Component``@Autowired``RegistrationForm
像这样的类RegistrationForm
应该代表表单数据,而别无其他。通常,控制器会询问RegistrationForm
用户ID,然后User
从DAO本身查看实际对象。如果要RegistrationForm
查找User
自身,则控制器需要RegistrationForm
在请求User
对象时手动提供DAO
。
就Spring论坛上的帖子而言,您会注意到它从未得到答案。这不是从中获取灵感的好来源。
请注意,我并不是说希望将bean自动装配到Form Back对象中不是一个好主意,我只是说Spring不会这样做。
问题内容: 我的应用无法自动装配entityManagerFactory。 我的 applicationContext.xml : 我的 java课 : 题: 为什么entityManagerFactory为空? 问题答案: 为了让spring使用注释进行自动扭曲,您必须告诉spring。在您的xml配置中(假设您还没有element)添加一个。这将指示Spring应用程序上下文来扫描注解(如,,
问题内容: 但是当应用程序尝试在客户端请求之后调用它时,自动装配的Bean为空。在applicationContext.xml中,我只有 组件扫描 设置。 -- 我究竟做错了什么? UPD: 这是我的pom.xml https://bitbucket.org/spukhov/memo- ws/src/00724e00e3aa786f62fd0e43fe0606de6ae569df/pom.xml?
@Autowired注释提供了对自动装配应在何处以及如何完成的更精细控制。 @Autowired注释可用于在setter方法上自动装配bean,就像@Required注释,构造函数,具有任意名称和/或多个参数的属性或方法一样。 @Autowired on Setter Methods 您可以在setter方法上使用@Autowired注释来删除XML配置文件中的“property”元素。 当Spr
platformVersion和environment始终为空。在日志中:添加[class path resource[tests.properties]]PropertySource以最低的搜索优先级。我看到stackoverflow上的其他帖子(Autowired Environment是空的),我不想去实现EnvironmentAware。为环境而将私人改为公共并不能解决问题。任何其他想法都
我在controller中使用CGlib代理进行拦截方法,并为此添加了一些行为。但是我遇到了一个问题,当controller有autowired Bean时,它没有初始化,并且返回为null 代理生成as
问题内容: 我有一个具有字段()的Spring 类(),但是该字段是我尝试使用它时所用的。日志显示该bean和该bean都在创建,但是每当我尝试在服务bean上调用该方法时,都会得到一个a 。Spring为什么不自动接线该领域? 控制器类: 服务等级: 应该自动连接的服务bean,但不是: 当我尝试时,出现以下异常: 问题答案: 本文向大家介绍为什么我的Spring @Autowired字段为空?
我有一个带有JSF2 end Spring4.3的webmodule。在backing bean中,我使用对jar的服务进行DI。在EAR模块中有WAR、带有Spring的JAR和带有Spring配置文件的JAR。 下面是片段: : 当我在Backing Bean中使用时,值为(没有任何异常)。我的JSF bean 你能帮帮我吗,拜托。
问题内容: 我应该在DI中使用哪个批注或(特定于Spring)? 我已经成功地在过去使用两种,和 我的直觉是坚持使用该标签,因为它已被jsr人士批准。 有人对此有强烈的想法吗? 问题答案: 在3.0之前的spring中,哪一个都不重要。 在Spring 3.0中,支持标准(JSR-330)注释-将其与结合使用。请注意,spring现在还支持元注释: 所以你可以有 要么 然后: 这样就减少了字符串名