代码之家  ›  专栏  ›  技术社区  ›  groo

如果主接口有一个用户引用,如何在SeamREST服务中实例化主接口?

  •  3
  • groo  · 技术社区  · 15 年前

    我正在开发我的第一个Seam+Android应用程序,正如预期的那样,我面临着一些新的场景。

    现在,特别是对于这个应用程序,我决定不保留任何状态,因为REST服务上可能有80%到90%的服务器调用将专门用于执行简单的同步,而客户端已经离开了一段时间,因此(可能)没有必要在服务器端为这些调用保留任何状态。

    有一个特定的例程,我需要持久化一个由设备发送到服务器端的对象,这个对象绑定到一个特定的用户(我认为这是一个非常常见的场景)。

    @Name("pesoHome")
    public class PesoHome extends EntityHome<Peso> {
    
        private static final long serialVersionUID = 6087763635317971234L;
    
        @In
        User user;
    

    我们需要一个rest服务,它使用以下主界面:

    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
    

    我知道我可以有一个不同的方法,在那里我会建立一个seam组件,没有对用户的引用,而不是在其中建立用户并将其放置在一个新的对话中,而不是注入我需要的主引用,但是。。。

    []秒

    1 回复  |  直到 15 年前
        1
  •  2
  •   groo    15 年前

    正如Arthur在这篇帖子评论中所建议的,我对代码做了一点修改,现在可以工作了:

    PesoHome公司:

        @In(required=false)
        User user;
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    

    比在佩索斯特:

    User usuario = userPesquisa.pesquisaUsuarioPorEmail(email);
    pesoHome.setUser(usuario);
    

    因为现在创建时不再需要用户,所以不会触发错误,我可以在搜索DB后进行后期绑定以恢复正确的用户。非常简单的解决方案。谢谢你,亚瑟。

    []秒