我正在构建一个 JSF 应用程序。我定义了 GUI 并使用 select 语句查询数据库。
现在我必须执行插入语句,但我不知道如何读取value
JSF 输入组件的内容<h:inputText>
并将其发送到执行插入的 bean。
值是否应该<h:inputText>
通过 映射faces-config.xml
,以便我可以在我的 Java 代码中使用它?
我正在构建一个 JSF 应用程序。我定义了 GUI 并使用 select 语句查询数据库。
现在我必须执行插入语句,但我不知道如何读取value
JSF 输入组件的内容<h:inputText>
并将其发送到执行插入的 bean。
值是否应该<h:inputText>
通过 映射faces-config.xml
,以便我可以在我的 Java 代码中使用它?
您需要将所有<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。