Java JSF2:在EL表达式中传递方法

Java JSF2:在EL表达式中传递方法,java,jsf-2,el,Java,Jsf 2,El,是否可以在EL表达式中传递方法 我有一个bean和两个视图。第二个视图有一个按钮,但按钮触发的方法应由第一个视图定义。因此,当我从第一个视图链接时,我必须告诉第二个视图方法 我想象这样的情况: 第一视图: 第二种观点: 是的,这是可能的。以下是操作属性的说明: MethodExpression,表示在 此组件由用户激活。表达式必须求值 指向不接受参数并返回对象的公共方法 (调用其toString()以派生逻辑结果) 将传递给此应用程序的NavigationHandler 是的,有可能。以下是

是否可以在EL表达式中传递方法

我有一个bean和两个视图。第二个视图有一个按钮,但按钮触发的方法应由第一个视图定义。因此,当我从第一个视图链接时,我必须告诉第二个视图方法

我想象这样的情况:

第一视图:


第二种观点:


是的,这是可能的。以下是
操作
属性的说明:

MethodExpression,表示在 此组件由用户激活。表达式必须求值 指向不接受参数并返回对象的公共方法 (调用其toString()以派生逻辑结果) 将传递给此应用程序的NavigationHandler


是的,有可能。以下是
操作
属性的说明:

MethodExpression,表示在 此组件由用户激活。表达式必须求值 指向不接受参数并返回对象的公共方法 (调用其toString()以派生逻辑结果) 将传递给此应用程序的NavigationHandler


我认为在JSF中没有这样做的方法。我的建议是让来自第一个视图的调用在backingbean中选择一个委托,当单击来自第二个视图的操作时调用该委托

像这样的

public class Bean {

    public interface Delegate {
        void doSomething();
    }

    public class MethodADelegate implements Delegate {
        public void doSomething() {

        }
    }

    public class MethodBDelegate implements Delegate {
        public void doSomething() {

        }
    }

    private Delegate delegate;

    public String methodA() {
        this.delegate = new MethodADelegate();
        return "view2";
    }

    public String methodB() {
        this.delegate = new MethodBDelegate();
        return "view2";
    }

    public String view2Call() {
        delegate.doSomething();
        return "done";
    }
}

<h:commandLink action="#{bean.methodA}" value="Second view with method A" />
<h:commandLink action="#{bean.methodB}" value="Second view with method B" />

<h:commandButton action="#{bean.view2Call}" value="Call the method" />
公共类Bean{
公共接口委托{
无效剂量();
}
公共类MethodeLegate实现委托{
公共无效剂量测定法(){
}
}
公共类MethodBDelegate实现委托{
公共无效剂量测定法(){
}
}
私人代表;
公共字符串methodA(){
this.delegate=newmethodedelegate();
返回“view2”;
}
公共字符串方法B(){
this.delegate=new MethodBDelegate();
返回“view2”;
}
公共字符串view2Call(){
delegate.doSomething();
返回“完成”;
}
}

我认为在JSF中没有办法做到这一点。我的建议是让来自第一个视图的调用在backingbean中选择一个委托,当单击来自第二个视图的操作时调用该委托

像这样的

public class Bean {

    public interface Delegate {
        void doSomething();
    }

    public class MethodADelegate implements Delegate {
        public void doSomething() {

        }
    }

    public class MethodBDelegate implements Delegate {
        public void doSomething() {

        }
    }

    private Delegate delegate;

    public String methodA() {
        this.delegate = new MethodADelegate();
        return "view2";
    }

    public String methodB() {
        this.delegate = new MethodBDelegate();
        return "view2";
    }

    public String view2Call() {
        delegate.doSomething();
        return "done";
    }
}

<h:commandLink action="#{bean.methodA}" value="Second view with method A" />
<h:commandLink action="#{bean.methodB}" value="Second view with method B" />

<h:commandButton action="#{bean.view2Call}" value="Call the method" />
公共类Bean{
公共接口委托{
无效剂量();
}
公共类MethodeLegate实现委托{
公共无效剂量测定法(){
}
}
公共类MethodBDelegate实现委托{
公共无效剂量测定法(){
}
}
私人代表;
公共字符串methodA(){
this.delegate=newmethodedelegate();
返回“view2”;
}
公共字符串方法B(){
this.delegate=new MethodBDelegate();
返回“view2”;
}
公共字符串view2Call(){
delegate.doSomething();
返回“完成”;
}
}

不,那是不可能的。但是,您可以使用大括号符号
[]
调用动态bean方法



如果bean也需要是动态的,那么必须单独传递bean名称并了解其范围



不,那是不可能的。但是,您可以使用大括号符号
[]
调用动态bean方法



如果bean也需要是动态的,那么必须单独传递bean名称并了解其范围




非常感谢,但这不是我想要的。我知道,我可以调用一个方法并在action方法中返回导航结果。我想知道的是如何将一个方法作为新视图(或bean)的参数。非常感谢,但这并不是我想要的。我知道,我可以调用一个方法并在action方法中返回导航结果。我想知道的是如何将方法作为新视图(或bean)的参数。