Java企业版JavaEE 6+中提供的JSF 2+的一项不错的功能是,您可以将参数传递给任何操作组件(例如commandButton或commandLink组件)的操作方法。
基于此,您可以最大程度地减少托管bean中的方法数量。另外,为了最小化在bean内部设置的许多参数,动作可以使用这些参数来决定导航逻辑,如果您的bean的作用域大于请求作用域,则可以减少内存消耗。
怎么运行的:
- 打开您喜欢的IDE,我将使用Netbeans 7.4.1 。 (使用任何支持JavaEE 6或7的IDE)。
- 创建Web项目。
文件–>新建项目–> Java Web(左窗格) –> Web应用程序(右窗格) –>下一步。 - 随便命名(对我来说就是JSFeatures ) –>下一步–>服务器Glassfish4 –> Java EE 7 Web配置文件–>上下文路径“ / JSFeatures” –>下一步。
- 从框架中选择“ Java Server Faces ” -> Finish。
- 您应该具有以下项目结构:
- 右键单击JSFeatures项目->新的“ JSF Managed Bean ”。 及其名称和配置如下:
- 在编辑器页面中打开Bean的情况下,将以下代码复制并粘贴到package语句之后:
import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped;/*** @author mohamed_taman*/ @ManagedBean(name = "jSFeatBean") @RequestScoped public class JSFeatursBean {private String result;public String getResult() {return result;}public void setResult(String result) {this.result = result;}public JSFeatursBean() {}public Object addNumbers(int num1,int num2) {setResult("Hi there I am an action method to add numbers.");return null;} }
- 打开默认生成的index.xhtml ,然后复制以下代码并将其粘贴到文件中:
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://xmlns.jcp.org/jsf/html"><h:head><title>Facelet Title</title></h:head><h:body>Hello from Facelets<h:form><p><h:outputText value="#{jSFeatBean.result}"/></p> <h:commandButton type="submit"value="Submit"action="#{jSFeatBean.addNumbers}"/></h:form></h:body> </html>
- 右键单击index.xhtml,然后单击–> 运行 ; 您应该会看到以下内容:
- 单击提交按钮,观察h:outputText值,其值应为“ Hi,我是一个操作方法。 “
- 现在一切正常。 让我们做我需要演示的实际工作。
- 将addNumbers()方法签名更改为以下内容( 无需重新启动应用程序服务器 ):
- Bean方法:
public Object addNumbers(int num1) {int res = 0;res = num1;if (res == 0) {setResult("Hi there I am an action method to add numbers.");} else {setResult("Final result is: " + res);}return null;}
- 然后您的按钮呼叫到:
<h:commandButton type="submit"value="Submit" action="#{jSFeatBean.addNumbers(1)}"/>
- 按下按钮,输出文本值应为:
Final result is: 1
- Bean方法:
- 再做一次:
- Bean方法:
public Object addNumbers(int num1, int num2) {int res = 0;res = num1 + num2;if (res == 0) {setResult("Hi there I am an action method to add numbers.");} else {setResult("Final result is: " + res);}return null;}
- 然后您的按钮呼叫到:
<h:commandButton type="submit"value="Submit" action="#{jSFeatBean.addNumbers(1,2)}"/>
- 按下按钮,输出文本值应为:
Final result is: 3
- Bean方法:
注意:该参数可能具有不同的参数类型,但预计不会是同一类型,该方法也可能返回用于导航到其他页面的值,在此示例中,该参数返回null表示在同一页面上。
我非常喜欢此功能,非常有用,方便,编码愉快。
资源:
- JavaEE 7教程(7.5导航模型)。
参考: JSF:直接从页面将参数传递给JSF动作方法,这是我们的JCG合作伙伴 Mohamed Taman在“ 通过科学和艺术改善生活”博客上的JavaEE 6+的一项不错功能 。
翻译自: https://www.javacodegeeks.com/2014/01/jsf-passing-parameters-to-jsf-action-methods-from-page-directly-a-nice-feature-of-javaee-6.html