2014-11-11 2 views
0

хорошо я учусь jsf/hibernate и у меня возникают проблемы понимания того, как правильно назвать методы к моей ManagedBean сво простой CRUD, поэтому мне нужно пройти через JSF образуют Ciclista объект , но поскольку входы - это атрибуты Ciclista, как передать объект? (Как создать экземпляр этого) вот код:Как правильно вызвать метод из JSF в ManagedBean

@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

Вы получаете MethodNotFoundException, потому что вы написали CREAR вместо Создать.

Но правильный способ сделать это должен был бы вызвать метод save() без аргументов, который отвечает за сбор вашего объекта, который вы хотите сохранить.

Поскольку вы уже связывания ваших полей ввода свойств компоненты, все, что вам нужно будет сделать, это использовать метод как это:

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"; 
} 

вашего CommandButton в настоящее время должен быть направлен на save() методе вашего компонента. Входные значения в форме будут вставлены в ваши свойства для выпечки, а метод save() соберет экземпляр и, наконец, вызовет ваш метод persist.

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

Обычно вы не должны называть DatabaseBean напрямую, но добр из Controller - или как-либо один хотел бы назвать его. Этот Bean должен затем использовать вашу службу баз данных, которая должна отвечать только за CRUD-Функциональность.

По крайней мере, для больших приложений это был бы беспорядок с методами databasemethods и другими (связанными с просмотром) методами, смешанными в одном классе.

+0

hehe на самом деле ошибка была здесь ошибка typo, но в фактическом файле методы верны, но спасибо, что это разрешило мой вопрос, я понимаю, это может быть связано с 'Dependency Injection', если вы знаете ссылку Я могу это узнать? – shep

Смежные вопросы