【问题标题】:How to pass parameter in value expression and method expression in JSF 2?如何在 JSF 2 中的值表达式和方法表达式中传递参数?
【发布时间】:2023-03-17 22:01:01
【问题描述】:

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

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

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

上面的例子使用了一个值表达式。

这是默认的:

&lt;h:inputText value="#{userNumberBean.userNumber}"&gt;

豆类-

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:

&lt;h:inputText value="#{userNumberBean.userNumber('5')}"&gt;

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

我的问题:我如何做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

    在这种情况下,getter 和 setter 会在您的支持 bean 上自动调用。

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

    &lt;h:inputText value="#{userNumberBean.userNumber}"&gt;

    用户输入的表单值将作为参数传递给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 方法之一来应用默认值。

    【讨论】:

    • 不确定。实际上,我已经有一段时间没有使用 JSF 了。应该没关系。
    • 不,我在 IDE 中检查了它,虽然 commandButton 确实有,但该按钮标签没有动作属性,并且它与它配合得很好。所以,我想你应该相应地编辑它
    【解决方案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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • Tomcat7 支持它,我认为。
      • 不知道 Tomcat 但它不能在 GlassFish 3 上工作...让我尝试包括那个 jar 希望能工作
      • @exex:这个答案根本没有解释/回答你的具体问题。 -1 为此。无论谁赞成这个答案,都应该重新阅读这个问题。
      • @BalusC 你不应该对此投反对票,他已经给出了正确的答案。
      • @exex:不,JBoss EL 不会解决你的问题。您只是使用了 invalid EL 语法,正如 jahroy 所解释的那样。没有一种 EL 实现可以解决它。您只需要修复无效的 EL 语法。此外,JBoss EL 仅在您的环境不支持 EL 2.2 时才有用。但你的可以! (EL 2.2 是 Java EE 6 的一部分)。所以这个答案不仅是错误的,而且完全没有用。
      猜你喜欢
      • 2012-12-04
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多