Java 如何在ace:menuButton组件中绑定ace:menuItem

Java 如何在ace:menuButton组件中绑定ace:menuItem,java,jsf,xhtml,icefaces-3,Java,Jsf,Xhtml,Icefaces 3,在我的IceFaces3应用程序中,我有一个下拉菜单。我想动态地填充它。在我的ManagedBean中,我有一个定义菜单项的方法。它获取标签和actionMethod,并在MenuItem上对它们进行赋值。启动应用程序时,下拉菜单项始终为空 ManagedBean: package com.omb.view; import java.io.Serializable; import javax.el.MethodExpression; import org.apache.commons.lo

在我的IceFaces3应用程序中,我有一个下拉菜单。我想动态地填充它。在我的ManagedBean中,我有一个定义菜单项的方法。它获取标签和actionMethod,并在MenuItem上对它们进行赋值。启动应用程序时,下拉菜单项始终为空

ManagedBean:

package com.omb.view;

import java.io.Serializable;

import javax.el.MethodExpression;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.icesoft.faces.component.menubar.MenuItem;

@Controller
@Scope("session")
public class MyBean implements Serializable {

    private static final Log logger = LogFactory.getLog(MyBean.class);

    private MenuItem menuItem1;

    public String initMyBean() {

        try {
            initMenuItem();
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }

    private void initMenuItem() {

        menuItem1 = new MenuItem();
        menuItem1.setValue("Menu 1");

        MethodExpression actionExpression = FacesUtils.createAction("#{menu1Bean.display}", String.class);
        menuItem1.setActionExpression(actionExpression);

    }

    public MenuItem getMenuItem1() {
        return this.menuItem1;
    }

    public void setMenuItem1(MenuItem menuItem1) {
        this.menuItem1 = menuItem1;
    }

}
面部轮廓

package com.omb.view;

import javax.el.MethodExpression;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.MethodExpressionActionListener;

/**
 * JSF utilities.
 */
public class FacesUtils {

    public static MethodExpression createAction(String actionExpression, Class<?> returnType) {
        FacesContext context = FacesContext.getCurrentInstance();
        return context.getApplication().getExpressionFactory()
                .createMethodExpression(context.getELContext(), actionExpression, returnType, new Class[0]);
    }

    public static MethodExpressionActionListener createActionListener(String actionListenerExpression) {
        FacesContext context = FacesContext.getCurrentInstance();
        return new MethodExpressionActionListener(context
                .getApplication()
                .getExpressionFactory()
                .createMethodExpression(context.getELContext(), actionListenerExpression, null,
                        new Class[] {ActionEvent.class}));
    }
}
package com.omb.view;
导入javax.el.MethodExpression;
导入javax.faces.context.FacesContext;
导入javax.faces.event.ActionEvent;
导入javax.faces.event.MethodExpressionActionListener;
/**
*JSF实用程序。
*/
公共类脸谱{
公共静态MethodExpression createAction(字符串actionExpression,类returnType){
FacesContext context=FacesContext.getCurrentInstance();
返回context.getApplication().getExpressionFactory()
.createMethodExpression(context.getELContext(),actionExpression,returnType,新类[0]);
}
公共静态方法ExpressionActionListener createActionListener(字符串actionListenerExpression){
FacesContext context=FacesContext.getCurrentInstance();
返回新的MethodExpressionActionListener(上下文
.getApplication()
.getExpressionFactory()
.createMethodExpression(context.getELContext(),actionListenerExpression,null,
新类[]{ActionEvent.Class});
}
}
screen.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<body>
    <ui:composition>
        <ice:form id="headerForm" xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:ice="http://www.icesoft.com/icefaces/component"
            xmlns:ace="http://www.icefaces.org/icefaces/components"
            xmlns:c="http://java.sun.com/jstl/core"
            xmlns:ui="http://java.sun.com/jsf/facelets">

            <div class="menu">
                <ace:menuButton id="menuButton" effect="slide" effectDuration="200" value="Menu Button">
                    <ace:menuItem binding="#{myBean.menuItem1}"/>
                </ace:menuButton>

            </div>
        </ice:form>
    </ui:composition>
</body>
</html>

我最终使用了标准溶液:

<ace:menuButton id="menuButton" effect="slide" effectDuration="200" value="Menu Button">
       <ace:menuItem value="Menu 1" action="#{myBean.display}"/>
</ace:menuButton>