3

我试图让 Spring 在我的 Playframework 2.1 项目中工作,但还没有成功。我正在关注Guillaume Bort 的关于如何让它工作的教程。项目正确启动,它调用操作(通过 GET)signupForm 很好(如下所述)但是当我尝试提交表单时,我得到下一个异常:

获得异常

它似乎不喜欢 @Transactional 注释。这是我的控制器代码的一部分:

@org.springframework.stereotype.Controller
public class UserController extends Controller {
    @Autowired
    private UserService userService;

    public Result signupForm() {
        // This is the initial method called via GET (works fine)
    }

    @Transactional
    public Result signup() {
            ... code ....
            userService.save(user); // call to the injected service
            ... more code ...
        }
    }
    ... mode code ...

这是我的 components.xml(放在 /conf 中):

<?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:component-scan base-package="controllers, services, dataaccess, models"/>
</beans>

(数据访问是放置我的 dao 的地方)

这是我服务的一部分(以防万一):

@Service("userService")
public class UserService {
    @Autowired
    private UserDao userDao;
    ... more code ...

最后,这是本案相关道的一部分:

@Repository("userDao")
public class UserDaoJpa implements UserDao {
    ... more code ...

如下图所示,Global 中的 getControllerInstance 方法试图获取 Transactional 注释的实例,我不知道为什么。对我来说,它不应该试图实例化它。春季自动扫描的包裹中不会发生这种情况。

这就是spring试图实例化的东西

感谢您提供的任何帮助。

PS:我是春天的新手。

4

2 回答 2

3

您可能导入play.db.jpa.Transactional而不是org.springframework.transaction.annotation.Transactional.

第一个将带注释的动作包装在 中TransactionalAction,Spring 对此一无所知,因此查找失败。

您可能还希望将事务处理移至您的服务层。

于 2013-08-11T00:42:36.390 回答
-2

只需将 TransactionalAction 类注册到您的 spring 上下文

<bean class="play.db.jpa.TransactionalAction"/>
于 2014-04-19T16:05:15.680 回答