如何正确地将方法从jsf调用到ManagedBean

时间:2014-11-11 17:38:32

标签: java hibernate jsf

我正在学习jsf/hibernate并且我无法理解如何正确地调用方法ManagedBean 它是一个简单的CRUD,所以我需要传递一个Ciclista对象的jsf,但由于输入是Ciclista属性我如何传递对象? (如何创建它的实例)这是代码:

@Override
public String create(Ciclista c) {
    Session s = sFac.openSession();
    s.beginTransaction();
    s.save(c);
    s.getTransaction().commit();
    s.close();
    return "Administrador?faces-redirect=true";
}

和jsf形式:

   <h:form class="form">
        <div id="input-wrapper">
            <h:inputText class="inputs" value="#{ciclistaBeanDB.nombre}" />
            <h:inputText class="inputs" value="#{ciclistaBeanDB.nacionalidad}" />
            <h:inputText class="inputs" value="#{ciclistaBeanDB.equipo}" />
        </div>
        <h:commandButton class="btn" action="#{ciclistaBeanDB.create()}" value="Create" />
   </h:form>

我收到错误:找不到方法,因为我没有通过Ciclista c中的crear(//here)对象 因为我本身没有对象,只是它的属性我该怎么办?

1 个答案:

答案 0 :(得分:1)

您收到了MethodNotFoundException,因为您写了 crear 而不是创建

但是正确的方法是调用一个没有参数的save()方法,它负责组合你想要持久化的对象。

由于您已经将输入字段绑定到bean属性,所以您需要做的就是使用如下方法:

public String save(){
   Ciclista c = new Ciclista();
   c.setNombre(this.nombre);
   c.setNacionalidad(this.nacionalidad);
   c.setEquipo(this.equipo);

   create(c);
   return "Administrador?faces-redirect=true";
}

你的命令按钮现在应该以你的bean的save()方法为目标。表单中的输入值将插入到烘焙bean属性中,save()方法将组装实例,最后调用persist-method。

<h:commandButton class="btn" action="#{ciclistaBeanDB.save}" value="Create" />

通常你不应该直接调用DatabaseBean,而应该调用Controller - 或者如何调用它。然后,这个Bean应利用您的数据库服务,该服务只应负责CRUD功能。

至少对于大型应用程序来说,将数据库方法和其他(与视图相关的)方法混合在一个类中会很麻烦。