如何在JSF 2中传递值表达式和方法表达式中的参数?

时间:2012-08-14 02:50:32

标签: java jsf jsf-2 javabeans parameter-passing

以下是Oracle JavaEE 6教程文档中的引用,用于在JSF 2中传递值表达式和方法表达式中的参数。

  

值表达式和方法表达式都支持参数。在以下示例中,它是来自guessNumber应用程序的修改标记,提供随机数作为参数,而不是从方法调用的用户输入:

<h:inputText value="#{userNumberBean.userNumber('5')}"> 

以上示例使用值表达式。

这是默认的:

<h:inputText value="#{userNumberBean.userNumber}">

Bean类 -

import java.util.Random;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped; 

@ManagedBean
@SessionScoped
public class UserNumberBean {

    Integer randomInt = null;
    Integer userNumber = null;

    public UserNumberBean() {
        Random randomGR = new Random();
        randomInt = new Integer(randomGR.nextInt(10));
        System.out.println("Duke's number: " + randomInt);
    } 

    public void setUserNumber(Integer user_number) {
        userNumber = user_number;
    }

    public Integer getUserNumber() {
        return userNumber;
    }

}

以下表达式未将5作为参数传递给inputText:

<h:inputText value="#{userNumberBean.userNumber('5')}">

它实际上会在运行时导致错误。

我的问题:我如何实现这一目标?

3 个答案:

答案 0 :(得分:5)

您不需要在您提供的示例中传递参数。

在这种情况下,将在您的辅助bean上自动调用getter和setter。

以下代码将调用 getUserNumber 和/或 setUserNumber 来检索和/或修改 inputText 组件的值:

<h:inputText value="#{userNumberBean.userNumber}">

用户输入的表单值将作为参数传递给 setUserNumber


要将参数传递给辅助bean方法,您可以执行以下操作:

<h:commandButton  action="#{userNumberBean.displayAlert('Hey')}"    value="Say Hey"/>
<h:commandButton  action="#{userNumberBean.displayAlert('Later')}"  value="Say Bye"/>

这将调用如下所示的方法:

public String displayAlert(String someText)


正如Bhesh Gurung的回答所示,您可以在构造函数中默认将 userNumber 设置为5.

您还可以使用其中一种方法suggested here来应用默认值。

答案 1 :(得分:2)

要将(显示)5设置为文本框中的默认值,请在视图中进行以下更改 -

<h:inputText value="#{userNumberBean.userNumber}">

并在managedbean中设置属性的值:

@ManagedBean
@SessionScoped
public class UserNumberBean {

    private Integer randomInt = null;
    private Integer userNumber = null;

    public UserNumberBean() {
        //...            
        this.userNumber = 5; // try this here
    }

    //getter/setter

答案 2 :(得分:-1)

使用JBoss EL。请参阅JBoss EL的这个documentation