java.lang.String can not be cast to Ljava.lang.Object

1

I'm trying to list items in a ui: repeat that is inside another, and I need to use the id of the outermost ui: repeat item as the parameter. But I can not do it because the following error is occurring:

java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;

UI: REPEAT

<ui:repeat var="itemRelato" value="#{livroOrdemController.relatos}" 
varStatus="status">

                <p:panel id="panelRelatos">
                    <h:outputLabel value="Data do Relato: "/>
                    <h:outputText value="#{itemRelato.dataOcorrencia}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </h:outputText>
                    <br />

                    <h:outputLabel value="Tipo do Relato: "/>
                    <h:outputText value="#{itemRelato.tipoRelato.descricao}"/>
                    <br />

                    <h:outputLabel value="Fase da Obra: "/>
                    <h:outputText value="#{itemRelato.faseObraServico.descricao}"/>
                    <br />

                    <h:outputLabel value="Inicio da Fase: "/>
                    <h:outputText value="#{itemRelato.dataIncioFase}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </h:outputText>
                    <br />

                    <h:outputLabel value="Términio da Fase: "/>
                    <h:outputText value="#{itemRelato.dataTerminioFase}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </h:outputText>
                    <br />

                    <h:outputLabel value="Descrição: "/><br />
                    <h:outputText value="#{itemRelato.descricao}"/>
                    <br />

                    <b>
                        <h:outputLabel value="Retificações/Complementos: "/>
                    </b>
                    <ui:repeat var="itemRetificacao" value="#{livroOrdemController.recuperarRetificacoes(itemRelato.idRelato)}"
                               varStatus="statusRetificacao">

                            <li>
                                <h:outputText value="#{itemRetificacao.descricao}"/>
                            </li>
                        </ui:repeat>

                    <br />

                    <p:commandButton value="Retificar Relato"
                                     update="#{livroOrdemController.componentes}"
                                     onclick="dialogRetificacao.show();"
                                     process="@this">

                        <f:setPropertyActionListener value="#{itemRelato}" target="#{livroOrdemController.relatoASerRetificado}"/>


                    </p:commandButton>

Controller Listing Method

public List<RetificacaoRelato> recuperarRetificacoes(Long idRelato) {
    List<RetificacaoRelato> retificacoes = new ArrayList<RetificacaoRelato>();
    Map<String, Object> params = new HashMap<String, Object>();
    String queryRetificacoes = "SELECT rr.descricao FROM RetificacaoRelato rr "
            + "WHERE rr.relato_idrelato = :idrelato";
    params.put("idrelato", idRelato);

    List<Object[]> objects = objectDao.listPesqQuery(queryRetificacoes, params);

    for (Object[] o : objects) {
        RetificacaoRelato retificacaoRelatoTemp = new RetificacaoRelato();
        retificacaoRelatoTemp.setDescricao((String) o[0]);
        retificacoes.add(retificacaoRelatoTemp);
    }

    return retificacoes;

ListPesqQuery method

@Override
public List<T> listPesqQuery(String query, Map<String, Object> params) {
    Query q = getEntityManager().createNativeQuery(query);
    for (String chave : params.keySet()) {
        q.setParameter(chave, params.get(chave));
    }
    return q.getResultList();

}
    
asked by anonymous 12.12.2018 / 13:43

1 answer

0

replace

retificacaoRelatoTemp.setDescricao((String) o[0]);

for

'retificacaoRelatoTemp.setDescricao(String.valueOf(o[0]));' 

or

retificacaoRelatoTemp.setDescricao(o[0].toString);
    
12.12.2018 / 15:37