Как отправить входные значения формы и вызвать метод в JSF bean
Я создаю приложение JSF. Я определил графический интерфейс и выполнил запрос операторов select к базе данных с помощью select.
Теперь я должен выполнить инструкции insert, но я не знаю, как прочитать value входного компонента JSF, такого как <h:inputText>, и отправить его в мой боб, который выполняет insert.
Должно ли значение <h:inputText> быть отображено через faces-config.xml, чтобы я мог иметь его в своем коде Java?
1 ответ:
Вам нужно поставить все
<h:inputXxx>/<h:selectXxx>компоненты в<h:form>и связывают их атрибутvalueсо свойством bean через выражение EL, например#{bean.property}, подкрепленное парой геттер/сеттер. При правильной настройке JSF автоматически установит значения в бобе, когда форма будет отправлена через компонент<h:commandXxx>в той же самой форме. Вы можете указать метод действия bean в атрибуте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>Следующий Боб печатает представленные значения в stdout, доказывая, что 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 wiki.
Обратите внимание, что все, что вы собираетесь делать с представленными значениями, выходит за рамки ответственности JSF. Например, манипулирование им, переход в другой класс, сохранение его в базе данных и т. д. Все это никак не связано с JSF. Он как фреймворк на основе HTML-форм уже выполнил свою работу по предоставлению вам представленных значений во вкусе используемых переменных Java. Остальное зависит от вас.
К исследуйте следующий шаг, вы должны на этом этапе просто делать, как будто у вас уже есть куча подготовленных / жестко закодированных переменных вместо целого пользовательского интерфейса на основе JSF. Например, чтобы сохранить значения в базе данных, люди обычно используют платформу уровня бизнес-сервиса, такую как EJB, которая, в свою очередь, использует платформу уровня сохраняемости, такую как JPA. Некоторые люди даже используют для этого" обычный ванильный " JDBC. Для получения дополнительных ссылок на конкретные примеры, начните здесь: JSF Controller, Service and Дао .
Comments