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

exe*_*ian 5 java jsf parameter-passing javabeans jsf-2

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

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

<h:inputText value="#{userNumberBean.userNumber('5')}"> 
Run Code Online (Sandbox Code Playgroud)

上面的示例使用值表达式.

这是默认的:

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

豆类 -

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

jah*_*roy 5

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

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

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

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

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


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

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

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

public String displayAlert(String someText)


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

您还可以使用此处建议的方法之一来应用默认值.