如何在JSF bean中发送表单输入值并调用方法

Mir*_*cea 8 jsf input facelets submit managed-bean

我正在构建一个JSF应用程序.我定义了GUI并使用select语句对select语句进行查询.

现在我必须执行insert语句,但我不知道如何读取valueJSF输入组件<h:inputText>,并将其发送到执行插入的bean.

应该<h:inputText>映射值faces-config.xml,所以我可以在我的Java代码中使用它吗?

Bal*_*usC 26

您需要将所有<h:inputXxx>/ <h:selectXxx>组件放入a <h:form>value通过EL表达式将其属性绑定到bean属性,例如#{bean.property},由getter/setter对支持.正确设置后,当表单以<h:commandXxx>相同的形式通过组件提交时,JSF将自动设置bean中的值.您可以通过EL表达式action<h:commandXxx>组件的属性中指定bean操作方法,类似于#{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>
Run Code Online (Sandbox Code Playgroud)

以下bean将提交的值打印到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;
    }
}
Run Code Online (Sandbox Code Playgroud)

就这样.将常规表单转换为ajax表单是<f:ajax>在命令组件中嵌套a的问题,如下所示.

<h:commandButton value="submit" action="#{bean.submit}">
    <f:ajax execute="@form" render="@form" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

您可以在我们的JSF wiki页面底部找到另一个示例和有价值的链接.

请注意,无论您打算如何处理提交的值都超出了JSF的责任范围.例如,操纵它,传入另一个类,将其保存在数据库中等等.这一切都与JSF无关.它具有基于HTML表单的框架,它已经完成了为您提供可用Java变量风格的提交值的工作.剩下的由你决定.

为了研究下一步,你应该在这一点上做,好像你已经有一堆预备/硬编码变量而不是整个基于JSF的用户界面.例如,为了保存到数据库中的值,人们通常使用像EJB这样的业务服务层框架,后者又使用像JPA这样的持久层框架.有些人甚至使用"普通香草"JDBC.有关具体示例的更多链接,请从此处开始:JSF Controller,Service和DAO.