Galera eis a exception…
SEVERE: Servlet.service() for servlet [facesServlet] in context with path [/ProjetoOlimpio] threw exception [Expression Error: Named Object: tipoAcaoConverter not found.] with root cause
javax.faces.FacesException: Expression Error: Named Object: tipoAcaoConverter not found.
at com.sun.faces.application.ApplicationImpl.createConverte
eis o front end:
<p:outputLabel for="tipo" value="#{msg['entity.tipoAcao']}"/>
<p:selectOneMenu id="tipo" required="true" converter="tipoAcaoConverter" value="#{acaoController.entity.tipoAcao}" >
<f:selectItem itemLabel="#{msg['label.selecione.item']}" itemValue="" noSelectionOption="true"/>
<f:selectItems value="#{tipoAcaoController.listAll}" var="tipoAcao" itemLabel="#{tipoAcao.descricao}" itemValue="#{tipoAcao}" />
</p:selectOneMenu>
Eis o Converter (q na verdade é um MB)
@ManagedBean(name = "tipoAcaoConverter")
@RequestScoped
public class TipoAcaoConverter extends BaseConverter<TipoAcao, Integer> implements Serializable {
private static final long serialVersionUID = 1L;
@ManagedProperty("tipoAcaoService")
private TipoAcaoService tipoAcaoService;
public TipoAcaoConverter() {
}
@PostConstruct
public void init() {
super.setEntityClass(TipoAcao.class);
super.setBaseService(tipoAcaoService);
}
}
Aí eu tenho um BaseConverter abstrato que não vem ao caso… Se precisar é só pedir!!
Você o deixou como ManagedBean, portanto precisa referenciá-lo com EL.
Altere disso:converter="tipoAcaoConverter"
para isso: converter="#{tipoAcaoConverter}"
[quote=Rodrigo Sasaki]Você o deixou como ManagedBean, portanto precisa referenciá-lo com EL.
Altere disso:converter="tipoAcaoConverter"
para isso: converter="#{tipoAcaoConverter}"
[/quote]caso não funcione, tente anotar teu converter com @FacesConverter.
acho que para ser um conveter deveria seguir o modelo adotado pelo faces algo do tipo
/**
*
* @author Rogério Martins da Silva 09/02/2012
* http://www.usinaweb.inf.br
*/
@FacesConverter(value = "statusAlunoConverter")
public class StatusAlunoConverter implements Converter {
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String retorno = new String();
if (value.equals("0")) {
retorno = "Inativo";
} else if (value.equals("1")) {
retorno = "Ativo";
} else {
retorno = "Transferido";
}
return retorno;
}
}
Verdade, acho que também precisa anotar com @FacesConverter, mas não tenho certeza. Nunca testei sem.
[quote=rogerioeerr]acho que para ser um conveter deveria seguir o modelo adotado pelo faces algo do tipo
[code]
/**
*
-
@author Rogério Martins da Silva 09/02/2012
-
http://www.usinaweb.inf.br
*/
@FacesConverter(value = “statusAlunoConverter”)
public class StatusAlunoConverter implements Converter {
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
throw new UnsupportedOperationException(“Not supported yet.”);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String retorno = new String();
if (value.equals(“0”)) {
retorno = “Inativo”;
} else if (value.equals(“1”)) {
retorno = “Ativo”;
} else {
retorno = “Transferido”;
}
return retorno;
}
}
[/code][/quote]Esse é o modo correto.
Mas quando se precisa injetar alguma coisa dentro do Converter, até a versão atual do JSF, isso não é possível.
A saída (POG recomendada por muitos, mas muitos mesmo) é de anotar o Converter como MB.
verdade sei que não se pode injetar Ejbs através de um converter, entaum eu faço um lookup para tal
É, essas geralmente são as 2 soluções apontadas, ou você faz um lookup (através de um Service Locator, ou até na mão mesmo), ou anota seu Converter/Validator como ManagedBean.
Na versão 2.2 do JSF, já será suportada injeção em Converters e Validators, mas por enquanto, tem que ser feito algum “workaround”
Galera…
Como estou usando Spring, eu resolvi assim:
@Component
@Scope("request")
e na view eu coloquei o # { } que eu tinha esquecido
valeu galera!
desculpa pelo erro besta!