Fórum Exibir campo longblob no JSF #418416

13/06/2012

0

Boa tarde,

Como faço pra exibir um campo do tipo longblob (mysql), em uma página JSF???

Usei a tag outputtext e inputtextarea, mas ambas imprimem [B@1e99daa7 que acredito ser a referência do objeto...

Obrigado,
Ricardo Pestana

Ricardo Pestana

Responder

Posts

13/06/2012

Davi Costa

Oque vc salva nesses campos arquivos?
Se for que tal tranformá-los em arquivos antes de exibir na tela.

att Davi
Responder

Gostei + 0

13/06/2012

Ricardo Pestana

Na verdade estou estudando JSF e peguei a tabela mysql.event pra fazer um exemplo (listar os campos em tela, abrir uma janela com detalhes) e o campo body que contém a instrução do evento é desse tipo.

Tem idéia de como trabalhar para exibir seu conteúdo em tela?
Responder

Gostei + 0

13/06/2012

Davi Costa

Precisamos saber o que vc tá salvando no banco, são array de bytes?... sem essa informação vai ser como atirar no escuro.

att Davi
Responder

Gostei + 0

13/06/2012

Ricardo Pestana

Desculpe, acho q não fui claro na resposta anterior.... mas é o texto (instrução sql) que usei na criação do evento. Por exemplo:

call minha_procedures


É isso que vc tá perguntando?

Obrigado pela atenção,
Responder

Gostei + 0

13/06/2012

Ricardo Pestana

Desculpe, acho q não fui claro na resposta anterior.... mas é o texto (instrução sql) que usei na criação do evento. Por exemplo:

call minha_procedures


É isso que vc tá perguntando?

Obrigado pela atenção,
Responder

Gostei + 0

14/06/2012

Davi Costa

O q pergunteié o que vc guarda nessa coluna do seu banco do tipo blob.
é um array de bytes? é um texto longo?
Dependendo do que vc esteja guardando lá, saberemos qual componente jsf mais indicado

att Davi
Responder

Gostei + 0

14/06/2012

Ricardo Pestana

Bom dia,

É um texto...

obrigado,
Responder

Gostei + 0

14/06/2012

Davi Costa

Ok,
mostra como tá sua página e seu controller. E vc tb garante que no banco não está da forma que renderiza na página né?
Desconfio que talvez a referencia na página não esteja legal

att Davi
Responder

Gostei + 0

18/06/2012

Ricardo Pestana


Bom dia,

Na página está assim:

<h:outputText value=Rotina/Instrução:></h:outputText>
<h:inputTextarea readonly=true rows=5 cols=60 value=#{mBEvent.selectedEvent.body}/>

E na entidade está assim:

@Lob
@Column(name = body_utf8)
private byte[] bodyUtf8;
Responder

Gostei + 0

18/06/2012

Davi Costa

Me parece não estar 100% legal, pois sua página está:

<h:inputTextarea readonly=true rows=5 cols=60 value=#{mBEvent.selectedEvent.body}/>

E na entidade está assim:

@Lob
@Column(name = body_utf8)
private byte[] bodyUtf8;
Como é seu getter, desse atributo?
Tenta potsra também os fontes de mBEvent, principalmente esse atributo selectedEvent e seu método getBody


att Davi
Responder

Gostei + 0

18/06/2012

Ricardo Pestana

Bom dia,

Segue o código...


@ManagedBean
@RequestScoped
public class MBEvent implements Serializable {

private Event selectedEvent;

public MBEvent() {
}

public Event getSelectedEvent() {
return selectedEvent;
}

public void setSelectedEvent(Event selectedEvent) {
this.selectedEvent = selectedEvent;
}

public List<Event> getAllEvent() throws ClassNotFoundException, SQLException {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(Mysql);
EntityManager em = emf.createEntityManager();
Query q = em.createNamedQuery(findAll);
List<Event> events = q.getResultList();
em.close();
emf.close();
return events;
}
}

@Entity
@Table(name = event)
@XmlRootElement
@NamedQueries({
@NamedQuery(name = findAll, query = SELECT e FROM Event e)
})
public class Event implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected EventPK eventPK;
@Basic(optional = false)
@NotNull
@Lob
@Column(name = body)
private byte[] body;


public byte[] getBody() {
return body;
}

public void setBody(byte[] body) {
this.body = body;
}

}


Responder

Gostei + 0

18/06/2012

Davi Costa

Olha o que eu perguntei desde o começo, vc salva um array de bytes:
@Basic(optional = false)
@NotNull
@Lob
@Column(name = body)
private byte[] body;

E ai vc quer salvar um texto ou um array de bytes?
Se for um array de bytes ai trabalhará com arquivo se for texto deve trocar para String

att Davi
Responder

Gostei + 0

18/06/2012

Ricardo Pestana

Davi,

Eu havia entendido sua pergunta, mas acho q fui infeliz na resposta..

É assim, estou montando uma página que exiba o conteúdo da tabela event do mysql. Essa tabela é onde ficam armazenados os jobs que utilizo para algumas manutenções em minha base.

Crio esses jobs com um comando do próprio mysql, e ele armazenha minha instrução nesse campo. A principio e pelo que entendo esse conteúdo sempre será um texto (script sql), e pelo que eu entendo (posso perfeitamente estar errado) estão usando lob prevendo que a instrução pode conter um script grande.

Bom, aí começou meu problema não consigo mostrar o conteúdo desse campo na página... se eu tiver que converter ou ler os bytes do lob para posteriormente convertê-los em texto e exibi-los no textarea eu não sei onde devo encaixar essa lógica.

Entendeu? Se puder me orientar eu agradeço...

Obrigado por enqto e abraços
Responder

Gostei + 0

18/06/2012

Davi Costa

Vai resolver facilmente seu problema se vc alterar:
@Basic(optional = false)
@NotNull
@Lob
@Column(name = body)
private byte[] body;

para
@Basic(optional = false)
@NotNull
@Lob
@Column(name = body)
private String body;

Desse modo pode conter grande quantidades de caracteres, pode ficar tranquilo

att Davi
Responder

Gostei + 0

18/06/2012

Ricardo Pestana

Davi,

Fiz o que sugeriu e veja o que foi exibido:

63616C6C2070726F635F6D616E5F646173685F636F6E73756C7461


Acho q não vou escapar na conversão né? Tem idéia de como fazer isso?

Obrigado
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar