我有类似的问题: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:对不起我的英语。答案 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;
}