11

我正在构建一个 JSF 应用程序。我定义了 GUI 并使用 select 语句查询数据库。

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

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

4

1 回答 1

33

您需要将所有<h:inputXxx>/<h:selectXxx>组件放在 a 中,并通过 EL 表达式(如 )将它们的属性<h:form> 绑定到 bean 属性,并由 getter/setter 对支持。正确设置后,当表单通过相同表单中的组件提交时,JSF 将自动设置 bean 中的值。您可以通过指向裸方法的 EL 表达式在组件的属性中指定 bean 操作方法。所有提交的值都可以立即以通常的 Java 方式获得。value#{bean.property}<h:commandXxx>action<h:commandXxx>#{bean.action}action()

给定这个带有一个输入字段和一个选择字段的 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 早在您在 action 方法中访问它之前就已经设置了这些值。

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 表单只需将 a 嵌套<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 这样的持久层框架。有些人甚至为此使用“plain vanilla” JDBC。有关具体示例的更多链接,请从此处开始:JSF 控制器、服务和 DAO

于 2010-09-09T23:20:38.510 回答