我正在开发我的第一个Seam + Android应用程序,我正面临着一些预期的新方案。
现在专门为这个应用程序,我决定不保留任何状态,因为REST服务上80%到90%的服务器调用将专门进行简单的同步,客户端已经消失了一段时间,所以那里是(可能)没有必要在服务器端保持这些调用的任何状态。
有一个特定的例程,我需要将设备发送的对象持久保存到服务器端,并且该对象绑定到特定用户(在我看来这是一个非常常见的场景)。
所以有一些代码要说明。
Home接口有一个Seam注入的用户:
@Name("pesoHome")
public class PesoHome extends EntityHome<Peso> {
private static final long serialVersionUID = 6087763635317971234L;
@In
User user;
我们需要使用这个家庭界面的休息服务:
public class PesoRest{
@Logger
Log log;
@In(create = true)
UserPesquisa userPesquisa;
@In(create = true)
PesoHome pesoHome;
@POST
@Path("/cadastrar/{userEmail}")
@Consumes(MediaType.APPLICATION_JSON)
public Response cadastraPeso(@PathParam("userEmail") String email, String jsonString)
{
String json = jsonString;
System.out.println("String jSon no servidor ==>> " + json);
由于家庭界面中的用户注入,在运行时会触发以下错误:
Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: pesoHome
at org.jboss.seam.Component.newInstance(Component.java:2144)
... 46 more
Caused by: org.jboss.seam.RequiredException: @In attribute requires non-null value: pesoHome.user
请注意,在请求正文中,JSon对象会提供有关此用户的信息,允许使用也注入的userPesquisa引用来恢复此用户。
我知道我可以有一个不同的方法,我将构建一个没有引用用户的接缝组件,而不是在它构建用户并将其放在一个新的对话中,而不是注入我需要的主页参考,但是...
我想知道可能应该有一些更标准的方法,因为这是一种常见的情况。有什么建议? :)
[]中
答案 0 :(得分:2)
正如Arthur在这篇帖子中所建议的那样,我已经改变了一些代码,现在它可以运行了:
PesoHome:
@In(required=false)
User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
而不是PesoRest:
User usuario = userPesquisa.pesquisaUsuarioPorEmail(email);
pesoHome.setUser(usuario);
并且因为现在不再需要创建用户,所以不会触发错误,我可以在搜索数据库以恢复正确的用户后执行后期绑定。相当简单的解决方案。谢谢亚瑟。
[]中