Bom dia, estou tentando carregar algumas combos aqui pelo enum, mais não estou conseguindo traduzir a chave do properties, como eu faço isso?
Vou postar partes enum, meu managed bean, e do arquivo xhtml!
ENUM:
[code]public enum TipoDocumento {
/**
* Documento de Entrada
*/
ENTRADA((byte) 0, "Entrada", "tipodocumento.entrada"),
/**
* Documento de Saída
*/
SAIDA((byte) 1, "Saída", "tipodocumento.saida");
/**
* Código.
*/
private byte codigo;
/**
* Descrição.
*/
private String descricao;
/**
* Chave properties.
*/
private String chave;
/**
* Construtor
*
* @param codigo
* @param descricao
* @param chave
*/
private TipoDocumento(byte codigo, String descricao, String chave) {
this.codigo = codigo;
this.descricao = descricao;
this.chave = chave;
}
/**
* Método para retornar a lista de tipos de documentos.
*
* @return - Lista de tipos de documentos.
*/
public static List<TipoDocumento> getLista(){
List<TipoDocumento> lista = new ArrayList<TipoDocumento>();
lista.add(ENTRADA);
lista.add(SAIDA);
return lista;
}
/**
* Método para pegar um tipo a partir de um código.
*
* @param codigo
* @return
*/
public static TipoDocumento getTipo(byte codigo){
for (TipoDocumento tipo : getLista()){
if (tipo.getCodigo() == codigo){
return tipo;
}
}
return null;
}
/**
* Método acessor para obter o valor do atributo codigo.
*
* @return Retorna o atributo codigo.
*/
public byte getCodigo() {
return codigo;
}
/**
* Método acessor para obter o valor do atributo descricao.
*
* @return Retorna o atributo descricao.
*/
public String getDescricao() {
return descricao;
}
/**
* Método acessor para obter o valor do atributo chave.
*
* @return Retorna o atributo chave.
*/
public String getChave() {
return chave;
}
[/code]
MANAGED BEAN:
/**
* Construtor
*
*/
public NotaFiscalControle() {
super();
tipoDocumento.addAll(TipoDocumento.getLista());
}
XHTML:
<h:panelGrid>
<h:outputLabel value="#{msgs['notas.fiscais.tipo.documento']}" styleClass="label" for="idTipoDocumento" />
<rich:select id="idTipoDocumento" enableManualInput="true" styleClass="comboTipoDocumento">
<f:selectItems value="#{notaFiscalControle.tipoDocumento}" var="item" itemLabel="#{item.chave}" itemValue="#{item.codigo}" />
</rich:select>
</h:panelGrid>
O que devo fazer para que o enum possa traduzir a chave do properties??
Porque na tela não sai “Entrada”, “Saída”, saí “tipodocumento.entrada” e “tipodocumento.saida” !!
Ajuda, please?
Obrigada!
Que tal ajudar-nos a te ajudar e postar o código nas tags [code]?
Onde está o construtor do Enum?
por favor, edite seu post e insira o código entre as tags
Melhorou, desculpem esqueci de colocar
!!!
veja o que você fez: ENTRADA((byte) 0, "Entrada", "tipodocumento.entrada");
0 - codigo
“Entrada” - descricao
“tipodocumento.entrada” - chave.
Isso de acordo com seu construtor:private TipoDocumento(byte codigo, String descricao, String chave) {
this.codigo = codigo;
this.descricao = descricao;
this.chave = chave;
}
portanto se você quer que apareça a descrição, não deve colocar a chave no itemLabel do seu rich:select
O que é exibido no combo é o
itemLabel="#{item.chave}"
no seu caso “tipodocumento.entrada” ou “tipodocumento.saida”.
Mude para
itemLabel="#{item.descricao}"
Eu sei disso digaoneves, mais eu quero que pegue o valor que está na chave la na classe app.properties !
Não quer que pegue da Descrição do enum, pq assim a chave nem seria usada aqui eu poderia apenas colocar assim:
public enum TipoDocumento {
/**
* Documento de Entrada
*/
ENTRADA((byte) 0, "Entrada"),
/**
* Documento de Saída
*/
SAIDA((byte) 1, "Saída");
Entendeu o que quero dizer?
Eu quero saber como faz para que o enum traduza o que está no app.properties e jogue na combo !
Vc tá mexendo com i18n?
Vamos supor que seu app.properties esteja configurado no faces-config.xml como msg, e nele tenha a propriedade ‘tipodocumento.entrada’.
Então basta fazer assim:
<f:selectItems value="#{notaFiscalControle.tipoDocumento}" var="item" itemLabel="#{msg[item.chave]}" itemValue="#{item.codigo}" />
Assim funciona, mais de forma errada, pq ele ñ exerga o código, nem a descrição, e nem a chave, dai ele pega e põe na tela ENTRADA e SAÍDA em maiúsculas , e não usa a chave do app.properties que está escrito Entrada e Saída em minúsculas, entendeu?
como se você está buscando um atributo de um bundle?
aonde estão esses valores ENTRADA e SAÍDA em maiúsculo ?
Os valores estão no Enum:
[b] ENTRADA[/b]((byte) 0, "Entrada", "tipodocumento.entrada");
Então eu não to usando nada p chamar um atributo bundle, tem que usar o f:bundle?
Você nem testou a sugestão do lsjunior ?
[quote=lsjunior]Vc tá mexendo com i18n?
Vamos supor que seu app.properties esteja configurado no faces-config.xml como msg, e nele tenha a propriedade ‘tipodocumento.entrada’.
Então basta fazer assim:
<f:selectItems value="#{notaFiscalControle.tipoDocumento}" var="item" itemLabel="#{msg[item.chave]}" itemValue="#{item.codigo}" />
Eu coloquei assim funcionou, mais no item fica dando esse erro aqui: “item” cannot be resolved
<f:selectItems value="#{notaFiscalControle.tipoDocumento}" var="item" itemLabel="#{msgs[item.chave]}" itemValue="#{item.codigo}" />
Mais esse erro não está interferindo, só fica aquele risco amarelo em baixo do item, mais valeu pela ajuda !
Abraço.