Как отправить входные значения формы и вызвать метод в JSF bean



Я создаю приложение JSF. Я определил графический интерфейс и выполнил запрос операторов select к базе данных с помощью select.

Теперь я должен выполнить инструкции insert, но я не знаю, как прочитать value входного компонента JSF, такого как <h:inputText>, и отправить его в мой боб, который выполняет insert.

Должно ли значение <h:inputText> быть отображено через faces-config.xml, чтобы я мог иметь его в своем коде Java?

185   1  

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 Дао .

    Ничего не найдено.

Добавить ответ:
Отменить.