DefaultMenuItem 上的素数值表达式



嗨,我试图在Primefaces的默认菜单项的某些属性(例如属性类)上设置值表达式。像这样:

  <p:menuitem class="#{view.viewId.endsWith('index.xhtml') ? 'menuitm-hovered' : ''}" value="Home" url="/"  />

排除这些和平

  class="#{view.viewId.endsWith('index.xhtml') ? 'menuitm-hovered' : ''}"

而是程序化的。在豆子上应该是这样的:

  menuItem.setValueExpression("class", Helper2.createValueExpression("#{view.viewId.endsWith('index.xhtml') ? 'menuitm-hovered' : ''}", Object.class));

默认菜单项 dosent 有 setValueExpression 方法,所以我卡住了,我不知道我该怎么做。如果有人能帮忙,我将不胜感激。

据我所知,setValueExpression 可以在 GraphicImage 中完成(在这些情况下带有值属性)

    GraphicImage image = new GraphicImage();
    image.setValueExpression("value", Helper2.createValueExpression("#{position.images.link}", Object.class));

以下是 Helper2 类的静态方法:

 public static ValueExpression createValueExpression(String expression, Class clazz) {
    FacesContext fc = FacesContext.getCurrentInstance();
    ELContext elContext = fc.getELContext();
    ExpressionFactory expFactory = fc.getApplication().getExpressionFactory();
    ValueExpression ret = expFactory.createValueExpression(elContext, expression, clazz);
    return ret;
}

试试这个:

MenuButton menuButton = new MenuButton();
item = new UIMenuItem();
item.setValue(command.getLabel());
item.setActionExpression(Utility.createMethodExp(command.getCommandExpression()));
item.setValueExpression("disabled", Utility.createExpression(command.getDisabledExpression(), Boolean.class));
menuButton.getChildren().add(item);

其中 Utility.createMethodExpression 是一个静态方法(我的类 Utility ):

public static MethodExpression createMethodExp(String stringExpression) {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getApplication().getExpressionFactory().createMethodExpression(Utility.getELContext(),
            stringExpression, Void.class, new Class[] {});
}

和 Utility.createExpression 是

public static ValueExpression createExpression(String stringExpression, Class<?> type) {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(),
            stringExpression, type);
}

相关内容

  • 没有找到相关文章