我正在学习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)
对象
因为我本身没有对象,只是它的属性我该怎么办?
答案 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功能。
至少对于大型应用程序来说,将数据库方法和其他(与视图相关的)方法混合在一个类中会很麻烦。