Как отправить входные значения формы и вызвать метод в бине JSF
Я создаю приложение JSF. Я определил GUI и сделал операторы SELECT запроса к базе данных, используя select.
Теперь я должен сделать операторы вставки, но я не знаю, как читать value
входного компонента JSF, как <h:inputText>
и отправьте его моему бобу, который выполняет вставку.
Должен <h:inputText>
значение будет отображаться через faces-config.xml
, так что я могу иметь это в моем коде Java?
1 ответ
Вам нужно поставить все <h:inputXxx>
/<h:selectXxx>
компоненты в <h:form>
и связать их value
приписывать свойству bean-компонента через выражение EL, например #{bean.property}
при поддержке пары геттер / сеттер. При правильной настройке JSF автоматически устанавливает значения в бине, когда форма отправляется через <h:commandXxx>
Компонент в той же форме. Вы можете указать метод действия компонента в action
атрибут <h:commandXxx>
компонент через выражение EL, как #{bean.action}
, который указывает на голый метод action()
, Все представленные значения доступны сразу же обычным способом Java.
Учитывая этот пример формы JSF с одним полем ввода и одним полем выбора:
<h:form>
<h:inputText value="#{bean.text}" required="true" />
<h:selectOneMenu value="#{bean.choice}" required="true">
<f:selectItem itemValue="#{null}" />
<f:selectItem itemValue="One" />
<f:selectItem itemValue="Two" />
<f:selectItem itemValue="Three" />
</h:selectOneMenu>
<h:commandButton value="submit" action="#{bean.submit}" />
<h:messages />
<h:outputText value="#{bean.result}" />
</h:form>
Следующий bean-компонент печатает отправленные значения в стандартный вывод, доказывая, что JSF уже установил значения задолго до того, как вы получите к нему доступ в методе действия.
package com.example;
import javax.inject.Named;
import javax.enterprice.context.RequestScoped;
@Named // Use @javax.faces.bean.ManagedBean on outdated environments.
@RequestScoped // Use @javax.faces.bean.RequestScoped on outdated environments.
public class Bean {
private String text;
private String choice;
private String result;
public void submit() {
result = "Submitted values: " + text + ", " + choice;
System.out.println(result);
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getChoice() {
return choice;
}
public void setChoice(String choice) {
this.choice = choice;
}
public String getResult() {
return result;
}
}
Это все. Превращение правильной формы в форму ajax - это вопрос <f:ajax>
в компоненте команды, как показано ниже.
<h:commandButton value="submit" action="#{bean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
Вы можете найти другой пример и ценные ссылки внизу нашей вики-страницы JSF.
Обратите внимание, что все, что вы намерены делать с представленными значениями, не входит в обязанности JSF. Например, манипулирование им, переход в другой класс, сохранение его в базе данных и т. Д. Все это не относится к JSF. Как основанная на HTML-формах фреймворк уже сделал свою работу, предоставив вам отправленные значения во вкусе используемых Java-переменных. Остальное зависит от вас.
Чтобы исследовать следующий шаг, вы должны на этом этапе просто сделать так, как будто у вас уже есть куча подготовленных / жестко закодированных переменных вместо целого пользовательского интерфейса на основе JSF. Например, чтобы сохранить значения в базе данных, люди обычно используют каркас уровня бизнес-сервисов, такой как EJB, который, в свою очередь, использует каркас уровня персистентности, такой как JPA. Некоторые люди даже используют для этого "простой ванильный" JDBC. Для получения дополнительных ссылок на конкретные примеры, начните здесь: JSF Controller, Service и DAO.