Как отправить входные значения формы и вызвать метод в бине JSF - PullRequest
8 голосов
/ 10 сентября 2010

Я создаю приложение JSF. Я определил GUI и выполнил операторы select для запроса к базе данных, используя select.

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

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

1 Ответ

26 голосов
/ 10 сентября 2010

Вам необходимо поместить все <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>

Следующий компонент выводит отправленные значения встандартный вывод, доказывающий, что 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 .

...