1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

@FacesConverter sem instanciar classe

Olá pessoal,

Eu tenho um componente

<p:selectOneMenu  id="AREA_SUBORDINATED" value="#{areasBean.area.qwcssArea}" required="false" filter="true" filterMatchMode="startsWith" panelStyle="width:180px"  effect="fade">
    <f:selectItem itemLabel="Selecione" itemValue=""/>
    <f:selectItems value="#{areasBean.areas}"/>
</p:selectOneMenu>

Preciso gravar um objeto dentro da classe qwcssArea que está no bean.

/**
 * Bean da tela de cadastro de areas
 */
@Named("areasBean")
@SessionScoped
public class QwcssAreaBean extends AbstractBean {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Inject
    private QwcssAreaService areaService;

    private QwcssMemberService memberService;

    private QwcssArea area;

    private List<QwcssArea> areas;

    private String phoneNumber;

    private List<SelectItem> areaSelectItem; 

    public void setAreas(List<QwcssArea> areas) {
        this.areas = areas;
    }

    /**
     * Obtém a lista de areas
     * 
     * @return Lista de areas
     */
    public List<QwcssArea> getAreas() {
        try {
            if (areas == null) {
                areas = areaService.listarAreas();
            }

            return areas;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Abre a tela de cadastro de area
     * 
     * @param area
     * @return
     */
    public String novaArea() {
        area = new QwcssArea();
        alterar = false;
        return "addArea.faces";
    }

    /**
     * Exclui uma area
     * 
     * @param aluno
     *            Aluno para excluir
     * @return
     */
    public void excluir(QwcssArea area) {
        try {
            areaService.excluir(area.getAreaId(), QwcssArea.class);

            area = null;

        } catch (Exception e) {
            e.printStackTrace();
            e.getMessage();
        }
    }



    /**
     * Cadastra ou atualiza uma area (depende do estado da flag 'alterar')
     * 
     * @return
     */
    public String salvar() {

        try {

            if(phoneNumber.length() > 13){
                phoneNumber = phoneNumber.replaceAll("\\-","");
                phoneNumber = phoneNumber.replaceAll("\\(","");
                phoneNumber = phoneNumber.replaceAll("\\)","");
                phoneNumber = phoneNumber.replaceAll("\\.","");
                phoneNumber = phoneNumber.replaceAll("\\ ", "");
            }

            String acrony  = area.getAcronym();
            QwcssArea areaOther = areaService.obterAreaAcrony(acrony);
            if(areaOther == null){

            area.setPhoneManager(phoneNumber);
            areaService.inserir(area);

            FacesContext
            .getCurrentInstance()
            .addMessage(
                    null,
                    new FacesMessage("Area cadastrada com sucesso!"));

            area = null;
            areas = areaService.listarAreas();
            alterar = false;
            return "listArea?redirect=true;";

            }else{

                FacesContext
                .getCurrentInstance()
                .addMessage(
                        null,
                        new FacesMessage(FacesMessage.SEVERITY_FATAL,"Erro! Sigla já cadastrada no Banco", ""));
                return null;


            }
        } catch (Exception e) {
            FacesContext
            .getCurrentInstance()
            .addMessage(
                    null,
                    new FacesMessage(FacesMessage.SEVERITY_FATAL,"Erro!, Ocorreu um erro tentando cadastrar uma nova área. Por favor tente mais tarde! ", ""));
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Prepara para a edição
     */
    public void preparaEditar(){
        try {
            area = areaService.carregar(area.getAreaId(), QwcssArea.class);
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
    }

    /**
     * Altera um registro cadastrado previamente no banco de dados
     * @return String outcome
     */
    public String editar(){
        try{

            String a = area.getPhoneManager();

            if(area.getPhoneManager().length() > 13){
                a = a.replaceAll("\\-","");
                a = a.replaceAll("\\(","");
                a = a.replaceAll("\\)","");
                a = a.replaceAll("\\.","");
                a = a.replaceAll("\\ ", "");
            }

        if(areaSelect!=null){
            QwcssArea areaSuborndinada = areaService.obterAreaName(areaSelect);
            area.setQwcssArea(areaSuborndinada);
        }

        area.setPhoneManager(a);

        System.out.println("**********"+area.getQwcssArea()+"**********");
        areaService.alterar(area);
        area = new QwcssArea();
        areas = areaService.listarAreas();
        FacesMessage msg = new FacesMessage("Editar área", "Realizada com sucesso!");

        FacesContext.getCurrentInstance().addMessage(null, msg);
        //return "main.faces?faces-redirect=true";
        return null;
        }catch(Exception e){
            FacesContext
            .getCurrentInstance()
            .addMessage(
                    null,
                    new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro", "Ocorreu um erro tentando editar a área. Por favor tente mais tarde! "));
            e.printStackTrace();
             e.getMessage();
             return null;
        }
    }

    public void clear(){
        area = new QwcssArea();
    }

    public QwcssArea getArea() {
        if (area == null) {
            area = new QwcssArea();
        }
        return area;
    }

    public void setArea(QwcssArea area) {
        this.area = area;
    }

    public boolean isAlterar() {
        return alterar;
    }

    public void setAlterar(boolean alterar) {
        this.alterar = alterar;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public List<SelectItem> getAreaSelectItem() {
        if(areaSelectItem == null){
            areaSelectItem = new ArrayList<SelectItem>();
            List<QwcssArea> areaList = areaService.listarAreas();
            SelectItem item = null;
            for (QwcssArea area : areaList) {
                item = new SelectItem(area, area.getName());
                areaSelectItem.add(item);
            }

        }
        return areaSelectItem;
    }

    public void setAreaSelectItem(List<SelectItem> areaSelectItem) {
        this.areaSelectItem = areaSelectItem;
    }

}

Então, eu criei um convert especifico para ele, que pega o id do objeto selecionando no componente e o busca no banco de dados, através do qwcssAreaService, que contém a lógica do negócio de dita entidade.

@FacesConverter(forClass = QwcssArea.class)
public class QwcssAreaConvert implements Converter {


    @Inject
    private QwcssAreaService areaService;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {

        QwcssArea retorno = null;
        Long id = Long.parseLong(value);

        if (value != null) {
            if(areaService.carregar(id) != null){
                retorno = areaService.carregar(id);
            }

        }

        return retorno;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {

        if (value != null) {
            Long code = ((QwcssArea) value).getAreaId();
            String stringRetorno = (code == null ? null : code.toString());
            return stringRetorno;
        }
        return "";
    }
}

Quando submeto o dados para o servidor, ocorre o erro NullPointException. Debugando descobri que o container não está instanciando o QwcssAreaService.

Desde já agradeço um abraço Ivan Ribeiro

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags jsf java-ee conversão primefaces ou faça a sua própria pergunta.