如何发送表单input值并调用JSF bean中的方法

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

现在我必须做insert语句,但我不知道如何读取像<h:inputText>这样的JSFinput组件的value ,并将它发送给执行插入的bean。

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

您需要将所有的<h:inputXxx>组件放在一个<h:form>并通过ELexpression式(如#{bean.property}绑定它们的value属性到一个bean属性,这个expression式由一个getter / setter对支持。 如果设置正确,当表单通过<h:commandXxx>组件以相同的forms提交时,JSF将自动设置bean中的值。 你可以在<h:commandXxx>组件的action属性中通过ELexpression式(例如#{bean.action}指定一个bean操作方法,该expression式指向裸方法action() 。 所有提交的值都可以用通常的Java方法。

鉴于这个JSF表单的例子有两个必需的字段:

 <h:form> <h:inputText value="#{bean.text}" required="true" /> <h:inputText value="#{bean.number}" required="true" /> <h:commandButton value="submit" action="#{bean.submit}" /> <h:messages /> <h:outputText value="#{bean.result}" /> </h:form> 

下面的bean将提交的值打印到stdout,certificateJSF已经在action方法中访问它的那一刻之前就已经设置了这些值。

 package com.example; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; @ManagedBean @RequestScoped public class Bean { private String text; private Integer number; private String result; public void submit() { result = "Submitted values: " + text + ", " + number; System.out.println(result); } public String getText() { return text; } public void setText(String text) { this.text = text; } public Integer getNumber() { return number; } public void setNumber(Integer number) { this.number = number; } public String getResult() { return result; } } 

就这样。 将常规表单转换为ajax表单就是在命令组件中嵌套一个<f:ajax> ,如下所示。

 <h:commandButton value="submit" action="#{bean.submit}"> <f:ajax execute="@form" render="@form" /> </h:commandButton> 

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

请注意,无论您打算如何处理提交的值,都不是JSF的责任。 例如,操作它,传入另一个类,将其保存到数据库等等。这些都与JSF没有关系。 它作为一个基于HTML表单的框架已经完成了为您提供可用Javavariables的提交值的工作。 其余的由你决定。

为了调查下一步,你应该在这一点上做,就好像你已经有一堆准备/硬编码的variables,而不是一个完整的基于JSF的用户界面。 例如,为了保存数据库中的值,人们通常使用像EJB这样的业务服务层框架,然后使用像JPA这样的持久层框架。 有些人甚至使用“普通香草”的JDBC。 有关具体示例的更多链接,请从这里开始: JSF Controller,Service和DAO 。