gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:52:34 24 4
gpt4 key购买 nike

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

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

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

最佳答案

你需要把所有<h:inputXxx>/<h:selectXxx> <h:form> 中的组件并绑定(bind)他们的value通过 EL 表达式(如 #{bean.property})赋予 bean 属性的属性,由 getter/setter 对支持。如果设置正确,当表单通过 <h:commandXxx> 提交时,JSF 将自动设置 bean 中的值。相同形式的组件。您可以在 action 中指定一个 bean 操作方法<h:commandXxx> 的属性通过像 #{bean.action} 这样的 EL 表达式组成组件,它指向裸方法 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>

以下 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 形式是嵌套 <f:ajax> 的问题。在命令组件中,如下所示。
<h:commandButton value="submit" action="#{bean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>

您可以在 our JSF wiki page 底部找到另一个示例和有值(value)的链接。 .

请注意,无论您打算对提交的值做什么,都超出了 JSF 的责任范围。例如,操作它,传递给另一个类,将它保存在数据库中等等。这些都与 JSF 无关。作为一个基于 HTML 表单的框架,它已经完成了为您提供可用 Java 变量风格的提交值的工作。剩下的就看你了。

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

关于jsf - 如何发送表单输入值并调用 JSF bean 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com