Pbreadcrumb DefaultMenuItem,其值来自.properties文件(资源包)

时间:2014-11-24 19:08:37

标签: jsf-2 primefaces

我有类似的问题:DefaultMenuItem with a value from a .properties file (resource bundle)

我升级到primefaces 5.0并创建了一个动态痕迹,但是当我设置我的资源包邮件的密钥值时,会显示为如下字符串:

#{message.label_register_document}

但不是该键内的值...在这种情况下  label_register_document=registrar documento 预期的行为是应该显示registrar documento这是捆绑消息的值......

我测试了静态

<p:breadCrumb>
    <p:menuitem value="#{message.label_register_document}" url="#" />
    <p:menuitem value="#{message.label_register_category}" url="#" />        
</p:breadCrumb>

它按预期工作。但是当我在菜单项上设置这样的值时:

DefaultMenuItem item = new DefaultMenuItem(); item.setValue("#{"+value+"}"); item.setId(Integer.toString(this.migas.getElements().size())); item.setOnclick(ConstantesErp.FUNCION_STATUS); item.setCommand("#{"+action+"}"); this.migas.addElement(item);

其中值为:message.label_register_document

无效。有什么建议?

P.S:对不起我的英语。

1 个答案:

答案 0 :(得分:0)

如果有人需要我通过这样做解决的答案:

public void addMiga(String action, String label) throws Exception {
    DefaultMenuItem item = new DefaultMenuItem();
    item.setFragment(label);
    String valueTitulo = "";
    HtmlOutputText seccionLabel = new HtmlOutputText();
    if (label != null && !"".equals(label)) {
        String[] expresiones = label.split(",");
        for (String expresion : expresiones) {
            if (expresion.contains("label_")
                    || expresion.contains("_label")) {
                seccionLabel.setValueExpression("value",
                        getValueExpression(expresion));

            } else {
                seccionLabel.setValue(expresion);
            }
            valueTitulo += " " + (String) seccionLabel.getValue();
        }
    }
    item.setValue(valueTitulo);
    item.setId(Integer.toString(this.migas.getElements().size()));
    item.setOnclick(ConstantesErp.FUNCION_STATUS);
    item.setCommand(action);
    item.setAjax(false);
    this.migas.addElement(item);
}

    public static ValueExpression getValueExpression(String nombre) {
            FacesContext fc = FacesContext.getCurrentInstance();
            Application app = fc.getApplication();
            ELContext elContext = fc.getELContext();
            ExpressionFactory factory = app.getExpressionFactory();
            ValueExpression ve = null;
            try {
                ve = factory.createValueExpression(elContext, "#" + "{" + nombre
                        + "}", String.class);
            } catch (Exception e) {
                ve = null;
            }
            return ve;
        }