簡體   English   中英

如何正確地將方法從jsf調用到ManagedBean

[英]How to correctly call method from jsf to ManagedBean

我正在學習jsf/hibernate並且在理解如何正確地向我的ManagedBean調用方法(它是一個簡單的CRUD)時遇到了麻煩,因此我需要將jsf傳遞給Ciclista對象,但是由於輸入是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>

我收到錯誤消息:未找到方法,因為我本身沒有對象,所以我沒有通過crear(//here)Ciclista c對象,只是它的屬性該如何進行?

您將獲得MethodNotFoundException ,因為您寫的是crear而不是Create

但是正確的方法是調用不帶參數的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功能。

至少對於大型應用程序而言,將數據庫方法和其他(與視圖相關的)方法混合在一類中將是一團糟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM