1

我正在使用基于 Hibernate 数据库的登录系统开发我的第一个 Tapestry 应用程序。

在一个带有会话对象的页面上,我想调用我的Authenticator服务类,它也会注入会话并做一些事情。我的问题是,我无法运行任何服务,这非常令人沮丧,尽管我遵循了这样的简单指南:http ://code.google.com/p/shams/wiki/Service

在我的services包中,我得到了Authenticator.javaandAuthenticatorImpl.java接口和实现的类。在AppModule课堂上,我打电话

    binder.bind(Authenticator.class, AuthenticatorImpl.class);

在我的页面“ShowAllUsers”中,我注入了我的 Authenticator 服务对象:

...
public class ShowAllUsers{
@Inject
private Session session;

@Inject
private Authenticator authenticator;
...
}

但是当我在我的服务器上加载页面时,我收到以下错误:

org.apache.tapestry5.ioc.internal.OperationException
Error obtaining injected value for field de.webtech2.pages.user.ShowAllUsers.authenticator: No service implements the interface de.webtech2.services.Authenticator.

trace:
- Creating instantiator for component class de.webtech2.pages.user.ShowAllUsers
- Running component class transformations on de.webtech2.pages.user.ShowAllUsers
- Injecting field de.webtech2.pages.user.ShowAllUsers.authenticator

但是我的 AppModule 确实成功地将类绑定到接口。在 Maven 构建控制台中,我可以阅读“Authenticator:DEFINED”,如果我尝试将它绑定到另一个模块中,它会抱怨,因为它已经绑定在 AppMopule 中。

为什么挂毯看不到实现?我究竟做错了什么?

4

2 回答 2

0

很高兴您检查了启动日志输出,这肯定是解决此问题的第一次“健全性检查”。

我认为 uklance 的想法是正确的:做一个干净的构建,确保你没有多个名为 Authenticator 的类漂浮在周围……也许来自 3rd 方库。我总是遇到问题,我不小心导入了一个碰巧被命名为“资源”或其他东西的非 Tapestry 类。

于 2013-05-31T18:28:34.113 回答
0

我还没有解决问题本身,但我找到了解决它的解决方法。正如您在互联网上可能发现的那样,Tapestry 允许自动重新加载类。页面和组件工作正常,服务有一些限制——这似乎是出现问题的地方。Tomcat 不会将接口链接到实现。

修复:一个简单的 Eclipse 重启解决了这个问题。嗯。(如果您向现有服务添加了新方法,这也修复了“找不到方法”错误)

此外,当我执行时mvn clean,一切都被搞砸了很多次。Eclipse 不再能够解析最简单的类和包引用。无法再找到同一个包中的类,或者对 javax.internet 包的引用导致永远的虚无——而刚才一切正常。

使固定:

Right-click eclipse project -> Properties -> Maven

勾选“ Resolve dependencies from Workspace projects ”复选框并点击Apply。如果已经选中,取消选中 -> 应用,然后重新选中 -> 应用。Eclipse 应该会再次恢复正常——直到下一次......

于 2013-06-23T19:53:50.333 回答